generalize EIO to (E m) where M is a monad
WIP: implementing patchM

still a lot to do...
make Ize simpler
WIP: some cleanups, copy does not work yet as advertised