Add Makefile

Makefile currently contains only the unit-tests target.
Add Environment + improve unit tests

The environment maps symbols to variables. It's a primitive wrapper
around a dictionary with inheritance.

The unit tests are nested into groups and have more meaningful
descriptions.