Dictionary Validation

This is also probably not complete. More questions incoming...
> loadWithId looks wrong I think

It is, and that's my bad - I don't know what I was thinking. Will change first thing tomorrow.

Just on `ResultT[IO, Option[A]]` is there a "nice" way of dealing with them so you don't end up with `traverse` everywhere? eg. Can we create a light-weight specialised class that does the Right Thing, and if I did that would people find it useful? I guess this is the cost of doing business with Monads.