Dictionary Validation

This is also probably not complete. More questions incoming...
`loadWithId` looks wrong I think, it should return an Option[Dictionary] instead of failing on no dictionary. But, agreed we shouldn't be doing this. There is probably a fair bit of this meta-data code that assumes there is always a "starting value", but we should have two operations for these type of things `ResultT[IO, Option[A]]` and then a `ResultT[IO, A]` that turns the None case into an error, but it should always be built upon the `Option` variant so we don't have to "guess" about errors vs not existing.