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.
This means that `'abc'` is the string `abc`, and you have to quote and escape the quotes if you want the value to be a string wrapped in quotes, does that seem right?

What happens if you supply a string that doesn't parse, like say `Don't!` or `abc def`? Looks like you get `None` and the phase fails. Maybe that's ok and you just have to quote it.

Both cases are probably be worth hang tests for.