Static typechecking for simple variables and functions

Fixes #18 (variable creation and definition no longer requires a type expression)

This is a starting point for a number of more complex features (e.g. user-defined functions, user-defined/library-defined primitives).
Reading the LICENSE again I think we should truncate it earlier, since this is in a section called "How to apply this license to your program". Perhaps license information can be printed as part of a `--version` flag, since there's really no "interactive mode".