SI-7620 Remove floating-point-literals-without-digit-after-dot
SI-7668 Better return type inheritance for dep. method types

Return type inheritance already handles substitution of
type parameters of the overriding method for those of the
overriding.

This commit extends this to do the same for parameter symbols.
SI-7669 Fix exhaustivity warnings for recursive ADTs.

The pattern matcher's analysis was correctly finding
models under which the match in the enclosed test
could fail. But, when trying to render that model
as a counter example, it ran into an internal inconsistency
and gave up.

That inconsistency arose from VariableAssignment, which:

> turn the variable assignments into a tree
> the root is the scrutinee (x1), edges are labelled
> by the fields that are assigned a node is a variable
> example (which is later turned into a counter example)

In the process, it notes the unreachable case `V2 = NotHandled`,
which can only arise if `V1 = Op`, ie the scrutinee is `Op(NotHandled())`.
V2 is assosicated with the path `x1.arg`. The code then looked for
any variable assosicated with the prefix `x1` and registered that its
field `arg` was assosicated with this variable assignment.

However, the assignment for `V1 = NotHandled` (another missing case)
is also associated with the path `x1`. Registering this field makes
no sense here; we should only do that for `Op`.

This commit conditionally registers the fields based on the class
of `VariableAssignment#cls`. We no longer hit the inconsistency in
`VariableAssignment#allFieldAssignmentsLegal`.

This favourably changes the results of two existing tests.

I had to tweak the counter example pruning to avoid relying on
CounterExample.==, which is flaky in the light of Nil and List().
It is possible to have:

     A, B where A != B && A.coveredBy(B) && B.coveredBy(A)

Luckily it is straightforward to implement pruning entirely with
coveredBy.
Cleanups in type printing.

More consistency as to how to understand aliases,
singletons, specialized symbols, subclasses. Fewer
weird special casings, like normalizing tuples
and functions during type printing, but nothing else.
I avoid "normalize" entirely now, and do not make
special cases for dealiasing, which is already well
handled when printing error messages.

Look at the change to test/files/neg/t2641.check to get
a sense of why we should resist calling normalize during
the early days of a compilation run.

Anonymous and refinement classes can be printed far more
usefully by revealing their parents, and that too is here.

Hardened toString against undesirable side effects.
Make toString final to discourage any further rogue
toString overriders. Make safeToString a little safer.
Make -Ytyper-debug output readable.
Merge pull request #2690 from soc/SI-7620

SI-7620 Remove floating-point-literals-without-digit-after-dot
Merge pull request #2737 from retronym/ticket/7669

SI-7669 Fix exhaustivity warnings for recursive ADTs.
Merge pull request #2739 from retronym/ticket/7668

SI-7668 Better return type inheritance for dep. method types
Merge pull request #2746 from soc/topic/paulp-typer-debug-output

Improve type printing (toString/debugging)
Move map2Conserve to a new home, next to map2.
Make map2Conserve occupy constant stack space in spirit of SI-2411

I recently discovered a StackOverflowError, caused by this function:
https://gist.github.com/folone/7b2f2e2a16314ab28109
The circumstances are pretty extreme, still having a tail-recursive
function seems to be a good idea.
The function behaves the same way old function did (supported by tests),
which is not really how map2 behaves. I did not change this behavior to
not introduce any regression. I actually tried to make it behave like map2,
and it does introduce regression.