Add support for indexes to Collections

Implement other indexes as well as the API to create and destroy them.

TODO
=====
- [x] Add support for hash indexes
- [ ] Add error messages on index constraint violations
- [ ] Add support for geo indexes
- [ ] Add support for skip list indexes
- [ ] Add support for full text indexes
- [ ] Update README.md
Not sure I understand this. We're trying to make sure that an invalid index behaves like a proper error. We could probably remove the test of whether `second_document.errors.empty?` is `false` but otherwise shouldn't we test that it behaves exactly like other errors? Or would lines 153, 154 and 158 suffice? I'm suffering from the disease of the entire Ruby community of over testing (thanks to the propagation of rigorous TDD) and trying to cure myself.