RUBY-698 Support optional Regex compilation in pure Ruby and with C ext

This provides support for a "compile_regex" option for commands and finds.

If :compile_regex => false, a MongoRegexp object will be returned, which wraps the un-compiled Regexp.  The MongoRegexp can be compiled with the #unsafe_compile method (at which point, a core Ruby Regexp object is returned).  You may lost extra flags ('l' and 'u') supported by MongoRegexp but not by Ruby Regexp.

A MongoRegexp has a pattern and options.  The options can be an integer, array, or a string.  For example:

    MongoRegexp.new('.*', 'i', 'l')
    MongoRegexp.new('.*', 7)
    MongoRegexp.new('.*', 'il')

When "compile_regex" is true, a core Ruby Regexp object is returned, which is compiled upon initialization.
The "compile_regex" default value is true.

MongoRegexp can represent options ('l' and 'u') that are not supported by the core Ruby Regexp object.  This is to allow for the wrapper to deserialize a BSON Regex and not lose the extra flags.

A MongoRegexp object can be created from a Ruby Regexp by calling #from_native:

     MongoRegexp.from_native(/.*/)


I will open a separate pull request with the java ext changes to support this.