Add faster variable freshening

Comparing with master:

$ time pts --quiet --instance uu UU/D/count.lpts

real	0m5.665s
user	0m5.574s
sys	0m0.075s
$ time ./pts-master --quiet --instance uu UU/D/count.lpts

real	0m6.063s
user	0m5.969s
sys	0m0.076s

I repeated this more often, and the results look relatively stable.

For testing, I've used
Toxaris/tsr-experiments#636a1f5f9a6c79f8becaa98486f80a3f1c00221f with
`countRebuildIncompl` commented back in.
Speed up operations with insertLookupWithKey
Merge pull request #90 from Blaisorblade/topic/performance-3

Speed up variable freshening
Avoid matching on MkTypedTerm.

This is the first step towards making TypedTerm abstract in order to
easy changing its representation.
Generalize smart constructors to TypedTerm.

This avoids calling MkTypedTerm directly and is the second step towards
making TypedTerm more abstract.
Export TypedTerm abstractly.
Remove unnecessary comment.
Don't evaluate unchecked terms.

This deletes some calls to nbe on the arguments of a call to
typecheckPull.

It is not type-safe to evaluate potentially ill-typed terms. It is not
efficient (to the extent of changing termination behavior) to typecheck
the normal form of a term instead of typechecking the term itself. I
don't know why these calls to nbe were there in the first place.

This increases the exposure of existing bugs where well-typed terms are
compared syntactically instead of comparing up to beta-equivalence.
Remove unit tests about equivalence.

I plan to change equivalence so that it is defined on TypedTerm, but
unit tests on TypedTerm are annoying: For quickcheck properties, we
would need an Arbitrary instance, and for tests, we would need to
annotate the type by hand.

We should cover equivalence with system testing instead, by adding more
examples.
Change argument type of eval to TypedTerm.

This avoids evaluating potentially ill-typed terms by accident, and
saves us a lot of calls to strip.
Generalize TypedTerm to AnnotatedTerm.

This will allow to move TypedTerm to a different module without having
to move the AnnotatedTerm machinery.
Move TypedTerm to separate module.

This avoids cyclic module dependencies when using Value in TypedTerm in
the next commit.
Use same environment for typing and evaluation.
Use environment monad for eval.
Improve pts-variable-name-at-point.

Guard against the case that (symbol-at-point) returns nil.
Remove PTS.Dynamics.Normalisation.

The code in this module was never used and probably never worked.
Convert Binding to record.
Remove commented out instance Ord Term.
Move lookup(Type|Value) to PTS.Dynamics.Binding.

To be reused outside of PTS.Statics.Typing.
Reuse lookupValue in eval.