Add create_index / drop_index functionality

closes #488

* `create_index`
  - [x] `sqlite`
  - [ ] `pytables`: this is slightly different in that you generally don't name your index with this engine
  - [ ] `pymongo.Collection.create_index()`
  - [x] need to investigate other backends that might support indexes
  - [x] test `unique` parameters where possible (sql and mongodb so far)

* `drop`
  - [x] `tb.Table`
  - [x] `pymongo.Collection`
  - [x] SQL
  - [x] HDF5
  - [x] CSV

* misc.
  - [ ] convert PyTables `AssertionError` to `ValueError` or `TypeError`
  - [ ] find a less verbose example for the `create_index` and `drop` docstrings
Here's the breakdown of my understand of how naming of indexes work across the three above mentioned platforms:

- SQL: indexes must be named, because you potentially need to alter their properties later and you need a way to refer to them. One thing I'm not sure of is if you can have two different indexes on the same column.
- MongoDB: indexes don't have to be named, but they can be
- PyTables: indexes *can't* be named (at least through the exposed API)