Introduce a typedef keyword.

The funcenum parsing is a total mess, and the syntax is not what I'd like going forward. This patch introduces a `typedef` keyword with the following grammar:

```
typedef ::= "typedef" symbol "=" full-type-expr term
full-type-expr ::= func-type-expr
                 | "(" func-type-expr ")"
func-type-expr ::= "function" type-name "(" typedef-args? ")"
typedef-args ::= "..."
               | typedef-arg ("," typedef-arg)* (", " "...")?
typedef-arg ::= new-arg-decl
```