Changed the inputControl channel to send a custom type.
Review all these *Client receiver methods. They should probably either
all be receivers, or none.
Maybe put auth-related stuff into its own structure inside Client,
instead of at Client's top level.
Add a way to broadcast status information as negotiation happens or
disconnects occur. Possibly a new type of object that can be sent on
Recv along with stanzas. Or use sync.Cond to protect a state
variable.
Asynchronously updating Client.Features is not thread safe.
NewClient shouldn't be asynchronous.
Add a Reconnect() function.
Put roster and bind into separate packages, if possible.
Eliminate as many uses of Generic as possible.