RUBY-636 Initial fluent interface implementation: Scope for defining a query with options

This is an initial implementation of the fluent interface for doing a find with options.  A separate pull request will be made for additional CRUD operations.

## Scope
A Scope object is created and returned by the find method on Collection. The user can specify a selector and options for the query that are set on the Scope object at initialization.

The options and selector can be modified by calling methods on the Scope object.  The methods called with an argument will modify that option and return a new Scope.  The methods called without an argument will return the value for that option.  Methods named with the bang(!) will modify the Scope object itself.

## Terminators
The Scope object can be modified without limit until a _terminator_ is called.  A _terminator_ is a method such as #each or #to_a that will create a Cursor and execute the query on the server. #count and #explain are also terminators.
The terminators will be added to Scope in a separate pull request.

## Examples
    collection.find() # returns a Scope object
    collection.find({:name => "Emily"}).limit(5) # returns a Scope object
    collection.find({:name => "Emily"}).to_a # creates a Cursor and sends the query to the server, returns a result set
    

## Tests
Specs have been submitted in this pull request for the find functionality of a Scope.  As mentioned above, a separate pull request will be made with additional CRUD operations and specs.


## Update 7/11
In discussions with the fluent interface working group, it was decided that the Scope should be immutable.  The Ruby team then decided to provide both options: methods for modifying options that would return a new Scope object, and methods that were modify the object itself.  The latter is named with the bang (!)

Additional updates: 
* took out return_key
* added query_opts method for snapshot, max_scan, and show_disk_loc options
* added distinct method
* took out intersect method
* implemented initialize_copy
* implemented == and its alias, eql?
* implemented hash
* added object_id to inspect string
* took out be_String matcher and used core rspec String matcher