Emitter: eval_tree now takes a signature (for #70)

It's thought that things like build list/hash/tuple can use this to figure out
what type they should use to default to. It currently does nothing right now
though...this is just a starter commit.
Emitter: write_build_op really ought to use line_num provided.

Because there's not always a first argument (empty lists!)
Fix "list[integer] l = [1].append(10)" crash.

This was caused by a bug when append tried to swallow the [1] of the binary
right side as an argument. The append tree was not updating its parent.

Since append did not see that it had a parent, the assignment would use a
null result (causing a crash). A fix was given to oo assign too, to keep it
from crashing on compound ops.

A test has been added to pre-commit-hook.py to keep this from occuring again.