Fluent api implementation

This is a preliminary fluent API implementation according to the spec, as it currently stands.

There is one base class, CollectionView and a number of mixins that provide the various categories of fluent API methods.

The fluent API methods are split into the following modules:

- Modifyable: methods using the FindAndModify command
- Writable: methods using Delete or Update write operations
- Queryable: methods involving a query

Validatable: There is one other module that is used to validate attributes on the CollectionView objects and throws an exception if an invalid option is set. These methods are used by the other fluent methods.