get rid of store specialization and implement everything in terms of get and modify
empty is useless
consistency and better assumptions
the getOrElse must go - modify must flatten by itself
make modify of type (m a -> m b) and introduce map for lifting an (a -> b) in order to have flattening for modify