propagate info (atm just token pos) through parser, AST

added monomorphic AST type to make writing tests slightly easier,
don't need to write down test data (ASTs) complete with positional info
added top-level desugar function, handle match exprs only
removed Bar from desugaring target

In this context, `Bar` was the FATBAR operator from [0].

When compiling/desugaring pattern matching, there was only one case
when Fatbar was used: for handling the Empty rule [1]. This is the
base case of the recursion, when there are no more expressions being
matched on left, and either: (a) one equation of (b) no equations:

(a) match [] [(ps, e)] def
(b) match [] [] def

In (a), we can simply return e, this is the base case. (b) will only
occur in the case of non-exhaustive patterns, in which case we should
raise an error (or use def if this is an error raising expression
generated by the compiler and not an `else` or `otherwise` clause)

The only other times this can happen is if there are fewer (or more)
expressions in the match than there are corresponding patterns.

[0] chapter 5 of The Implementation of Functional Programming Languages
[1] sec 5.2.4 of [0]