Updating FistFunction signatures
Type inference mostly working

This diff provides a mechanism for determining the type of a Fist
expression without executing it. It relies upon the type() (formerly
signature()) annotations on FistFunctions.

This will eventually be used in a number of places:

- Given type information, we can avoid calling Fist.execute() every time
  the view graph changes: we only need to call it when the result would
  be visible (i.e. Fist.getType(command) === 'view').
- Given the type reference mechanism provided by (name type "x"), we
  can provide named variables in FistFunctions. We can also use this to
  show "ghost arguments" when blocks are dragged into the ViewGraph.