Handle intrinsic return aliasing properly.

Trickier than I thought, because the returned value (may) aliases to
some of the method parameters.

As a consequence introduce a return_alias attribute that describes the
alias relationship.

Also take into account the different alias when applying a combiner.
Improve documentation of passes.py.

Use doctest to validate documentation and improve tests.

Add a new backend, Python, based on unparse.py to dump the tree as
python code.

Fix a minor error in Exception else: handling thanks to this :-)
Fix bug in constant propagation.

Functions with global effects were not considered const.
Intrinsics had a global side effect by default.