Auth

A first stab at a new authentication model.  Feedback welcome :D

I'm using "authenticator" to describe an object representing a set of credentials and a client and socket on which to authenticate.  An "authenticator" is "authenticatable," and should know how to log itself in and out of its connection, and validate the credentials passed to it.  The following auth mechanisms each have their own "authenticatable" classes:
-sasl plain
-Mongodb-cr
-x509
-GSSAPI

Some of the things I have to add to this, besides just filling in the existing classes:
-client-level authentication management, in auth.rb
-rspec tests
Please fail if they don't provide symbols here instead of calling `to_sym` on the object. `to_sym` in any library is a DOS via a memory leak waiting to happen if an application were to allow user supplied parameters to configure the driver.