Redesigned the arguments for Witness. This changes the behavior of Bifunctor, etc. but allows us to expand the environment as we go.

* New: `WitnessM s = Witness (TypeM s) Id`
* Old: `WitnessM s = Witness (MetaK s) (MetaT s)`