SASL Auth Interface

Hi,

This PR enables implementation of any SASL mechanism.
The Auth interface is modeled after the one used by net/smtp.

It might be interesting to add CRAM-MD5 and SCRAM-* support based on this.


**Background:**

We are using your XMPP library to send messages with Facebook Chat.
Facebook allows authentication with an OAuth 2.0 token using their own
X-FACEBOOK-PLATFORM SASL mechanism. This mechanism is specific
to Facebook and therefore not really suitable for inclusion in the library,
but I could supply it too if you're interested in adding it anyway.