new: Optimize Proof, Optimize Heap

- drops all Defined entries from the evar map (applying the subst to the
  initial evar and the undefined evars types).
- call Gc.compact

Now the question is: where should these two commands be documented?
Fixing bug #3792.

Pretyping of [if] cases was missing a convertibility check with the ambient
type constraint, and just dropped it. This was making the pretyper construct
ill-typed terms.
Adding test for bug 3792.
Removing a unused boolean in the TacMove node of tacexpr AST.
Removing the unused boolean flag from the move tactic implementation.
Fixing bug #3803.

The Info layer was setting the required evarmap too eagerly, making the
tclWITHHOLE tactical accept terms with holes. The logging facility is
now inside the tclWITHHOLES.
Fixing wrongly used tclWITHHOLES in named tactics (continuation of 9fa45b3).
Replugging hints in rewriting strategies.
Adding a dynamic tag type in Pp.
Plug the dynamic tags in the Richpp mechanism.
Better printing of dynlink errors in native compiler.
Fix #3282: VM confused by let bindings in fixpoints.

I'm afraid this fix is a bit heuristic, but it seems to generate correct code in
all cases.
Evar normalization is now done eagerly.

As witnessed in the ProjectiveGeometry contrib, some evar normalization were
taking ages because of an exponential behaviour due to a call-by-name
substitution: when normalizing an evar, its arguments were substituted right
away and the resulting term was then normalized, leading to a potential
duplication of normalizations.

Now we normalize evar arguments before substituting them, in a call-by-value
fashion. It makes examples from ProjectiveGeometry compile instanteanously
when they were killing the machine due to excessive memory allocation before
the patch.

Note that there is a tension here: we may be normalizing evar arguments too
eagerly, and try a call-by-need approach instead. To choose which particular
strategy we use, we should do some benchmarks... On stdlib, call-by-value
and call-by-need seem indistinguishable. To be continued?
Universes.nf_evars_and_universes_opt_subst substitutes evars eagerly.

This is a continuation of the previous patch.
Renouncing to check only at the end of the call to "apply in" the
absence of remaining dependent evars when several arguments are given.
For simplicity of implementation, checking instead for every step of
the n-ary "apply in".
American spelling + layout in CHANGES.
Updating CHANGES (evars as ident).
Adapting output tests to current naming of evars, even if unclear
where it will eventually stabilize.
Accepting conversion on inner closed subterms while looking for
matching subterm destruct/induction on a partially applied
pattern. AFAICS, there is only such instance of destruct that needs
this in the contrins (in EuclideanGeometry/G3_ParticularAngle.v), but
while a more global decision is taken, I prefer at the current time to
adopt this approximation of 8.4 semantics, even if the flags are not
the same when the pattern is fully applied or not. Only so little
cases are concerned because in most cases, destruct/induction on a
partially applied pattern is of the form "destruct cst"
(e.g. "destruct eq_dec") and no conversion is needed anyway.

Not being uniform whether the pattern is fully applied or not is a bit
unsatisfactory, but hopefully, this is temporary.
Cleaner interfaces for linking locations of native compiler.

Stop sharing those references across constants of the same
module, which was triggering some bugs when using native_compute
in interactive mode in a functor declaration.