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).
This was causing the build to fail on my machine, and I replicated it on several other machines as well; I left it in in case its removal actually caused problems for someone else, who could enable that. Since the build is passing without it, I will delete the code from my next commit.