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).
Cool! I happy to hear that you're aware of the tech debt here and are thinking about ways to fix it. 

Still waiting on an answer about the purpose of `UnknownTypeValue`