Heavily refactor towards enum-based indexer.

Enum-based indexing idea comes almost exclusively from SwiftyJSON
project. It allows for string or int based indexing based upon the
context.
Updated README, split types across files.