Improve dictionary definition.

This change makes a number of improvements:
  - Definitions are no longer indexed in only one way, we
    have the core data and then a number of indexes for
    different situations.
  - Lots more tests over dictionary structure.
  - FeatureId becames a first class citizen in Definition
    this is importantant because a definition didn't make
    sense to pass around on its own before.
  - Sped up dictionary arbitrary (there was an exponential
    explosion in cases, so I have capped the number of base
    features).

Fixes #226.
Fixes #228.
Eagerly, create the indexes, to avoid any overhead accessing them repeatedly.
Grammar in Arbitraries
Introduce Dictionary.empty
Remove dead code in renameDictionary
Remove DictionaryTextStorageV2 sanity check test
Correct ordering of dictionary text v2 storage and broken spec
Fix DictionaryThriftStorageSpec due to internal Map in thrift format
Use constructor pattern matching for Definitions
Tidy up indexing.
Rename alias to source.
Use specs matcher where possible.
Merge pull request #230 from ambiata/topic/dictionary-indexing

Improve dictionary definition.