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 ::= type-expr
                 | "(" type-expr ")"
type-expr ::= "function" type-name "(" typedef-args? ")"
typedef-args ::= "..."
               | typedef-arg (", " "...")?
```