added `match...with` to lexer

using `match...with` rather than `case...of` since `case` is likely
going to be the result of desugaring match in the IR
corrected grammar

(documentation only, no code change)
parse `match` expressions

number of hacky issues with this -- no distinction between 0-arity
constructors and pattern variables, might want to consider taking
Haskell approach (data ctors must start with capital letter, variables
cannot) ?

either way, need to eventually extend grammar for patterns to include
literals and other interesting things like tuples