Range BSON support

Adds proper BSON support for Range objects.  This commit also includes
updates to the general BSON extension, primarily the BSON.generate()
method.

Use the generate() method to produce fully wrapped BSON output that can
be interpreted via BSON.parse().  It should be noted that only calling
#to_bson() on a supporting object does *NOT* prefix it with its
appropriate BSON_TYPE byte.