WIP: Indexing clean-up

Change index syntax to an array of objects:

index: [
    { foo: 'hash' },
    { bar: 'static' }
    { baz: 'desc' }
]

This eliminates the separate hash / range / order members. An alternative
would be { name: 'foo', type: 'hash' } at the cost of more verbosity.

Also:
- Clean up schema validation & internal schema info extraction
- Only keep internal schema in memory
- Eliminate this.indexAttrMap, which would only work until the next restart.
  This information is now fully covered by the regular schema info.
- Break out the index update logic in preparation for making it async

TODO:
- Re-activate index updates & cross-checking for highly consistent index reads
- Create tests for the above