initial attempt at mvcc

Implements an experimental version of MVCC which must be used in the
IO Monad. The ideal API is partially implemented in the
Control.Unsafe.Stasis module, unsafe because it uses unsafePerformIO
to try and present a "pure" API
add some more docs