#44 Convert Dictionary to Thrift and remove name

This is _not_ finished, but opening up to get some early feedback (if people are bored).

@markhibberd This hasn't changed all that much from my branch, but tried to break everything down just for my own sanity (and possibly yours).

The last commit is really my 'sin bin' of things that aren't quite finished yet. In my head the last big thing that _has_ to be done is more graceful migration of previous dictionaries. I'll most likely stick that in `DictionaryImporter`.

Any suggestions for what locking we _need_ in `IdentifierStorage` for this PR? It might be we're not (that) worried about contention of dictionaries being imported at this stage.

/cc @raronson 
No, I think in this case it should always pass or fail. It is a fine line, but generally anything that could potentially file (i.e. based upon user input etc... I would propagate the Option outwards, anything we expect to always succeed i.e. parsing of an identifier that we have control over, should be a ResultT.fail.

Also, add fromOption to ResultT in mundane if you get a chance, it is a generally useful combinator.