When defining a monomorphic Program, do not allow arbitrary instantiations
of the universe context in the obligations, it gets gradually fixed
globally by each one of them.
Fixes bug found in Misc/Overloading.
More efficient implementation of Ltac match, by inlining a stream map.
Emulates the writer monad in TactichMatching with a state-passing style monad.

I'm not sure exactly why this is, but it makes Ltac's match significantly faster (though there are still realistic examples which are much slower than they should).
Make the state monad in TacticMatching a CPS monad.

It avoids too many manipulation of IStream, resulting in further non-trivial efficiency improvement for Ltac's pattern-matching.
Fix a oversight in 5bf9e67b .

About 8 months after making this commit, I realised that I forgot to change a tclORELSE into a tclOR (which was the whole point of the commit to begin with). Shame on me.

It does not seem to have much of an effect on efficiency, though. It may be a hair faster, but mostly indistinguishably so.