Create TypedTreeMap that propagates types

If some node in tree is transformed changing the type,
the outer node could potentially also change type.

This patch implements a TypedTreeMap that propagates those
changes until types converge. Propagation is done for tree nodes
that are able to compute their type based on their children:
Pair, Block, If, Match, CaseDef, Try, SeqLiteral, Annotated

Note: patch doesn't cover Select's, see #143 for the issue
with Select.
Yes, It would yield a different tree, but would carry over it's type in `postProcess` from the old one. And in case `arg.tpe` did not change but `annot`(not even the type!) did there could be a wrong carried over type.