Pass in an error handling function to MQTTClient.

Allows better handling of asynchronous errors from
API consumers.
Expose MQTT Disconnect.

Also add a disconnect function to MQTTClient.
client: Clean session by default.
client: Simplify some code.
Better error handling when checking acked messages.
Return packet options from read_packet.

Useful for upcoming server stuff.

Also fix read_packet to actually return the right number of bytes.
Lwt_io.read does not guarantee the count; read_into_exactly does.
server: Add a stupid simple, noncompliant server.

Broadcasts each publish to all clients, regardless
of subscription status. (It is noncompliant after all...)
server: Clean up disconnects.
server: Don't add cxn to list until after subscribe.
sub: Add a module for proper subscriptions.
oasis: Run oasis setup to add subscriptions module.
git: Add .gitignore.