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
If you want to run tests conditionally, I would say to do it in a filter in the spec_helper.rb inside the configuration block... E.g.:

```ruby
RSpec.configure do |config|
  config.filter_run_excluding(only: ->(value){
    return true if value == :mri && defined?(JRUBY_VERSION)
    return true if value == :jruby && !defined?(JRUBY_VERSION)
  })
end
```

And the specs would look like:

```ruby
describe '#initialize' do

  context 'when something something', only: :jruby do
    # This will only run when on JRuby
  end

  context 'when something something', only: :mri do
    # This will only run when not on JRuby
  end
end
```

https://www.relishapp.com/rspec/rspec-core/v/3-0/docs/filtering/exclusion-filters