Introduce FunctionBlock tree and refactor to share more code

This also cleans up some of the ParseTree is* functions to better match the ES6 draft.

Also introduces ParameterTransformer which handles the prepending of statements to the function body for destructuring, rest and default parameters.

Fixes #287