RUBY-643 create new URI parser

### Feedback please
Wanted some feedback on this before adding documentation.

### Purpose
The URI class translates a uri string into client connection parameters.

It is implemented much like it is in Moped but with extra support for all of the options we provide (that make sense in the context of the ruby driver).

### Usage
There would be a connect class method on Client much like on the Session class in moped

```ruby
def connect(uri)
  uri = URI.new(uri)
  client = client.new(*uri.nodes, :database => uri.database, :opts => uri.options)
  client.login(uri.username, uri.password) if uri.credentials
  client
end
```

Options that have a particular role (such as authentication, read preference, and write concern) are grouped together in a sub hashes `:auth`, `:read`, and `:write` respectively. You get a hash that looks like this back from calling the options instance method:

```ruby
options = {
  # generic options
  :auth  => { # auth options, if any },
  :read  => { # read options, if any },
  :write => { # write options, if any}
}
```

I think deciding whether the options are valid or not is outside the scope of the parser and will be done inside the `Client` class.