Match statement

This adds a match statement that supports early return, break, and
continue. It also adds `var|let|const` declared pattern bindings so
users may control how bindings hoist.

This also fixes bugs pertaining to nested matches and intermediate refs
propagating incorrectly in deep patterns.
Updated README