Switched back (again!) from 'zero' to 'extract' for 'MonadTransControl', and added 'extract'' to 'MonadLiftControl' (for 7.7 and up).

This now makes the 'MonadTrans*' and 'MonadLift*' interfaces *completely* symmetrical. The reason for switching from 'zero' back to 'extract' is that it turned out it was necessary for implementing 'extract''! The other thing that was necessary was adding a Functor constraint to LiftState and LayerState, but this is okay and makes sense anyway.

I also did a little bit of optimisation in this commit. layers should now be competitive with monad-control for every use case, and in some cases it is even faster. I'm sure that somebody who actually knows what they're doing could make it even faster.