Fixes #293

Fixes #293: Improved code organization, improved type safety of variables, and improved coercion of variable values into types with given expressions. Added test suite for coercion to cover common cases.
How about tests for `coerce("123", Type.Top)`, and `"123.25", Type.Top`? We still get Int and Dec, right? Worth documenting, I think.

Also `"true"`, `"false"`, and `"null"`, but at some point it becomes clear what's happening.