Rework Value in favor of the new data model

The plan is to have a dictionary on each object and an optional "raw"
data field, so this commit renames things to fit that model.
Fix method naming conventions in interpreter.py
Refactor the parser to be a class

I want to be able to pass in things like the int type into the parser
so that it can construct literals in its AST, so I need it to be a
class so I can pass in the types through fields.
Create an Interpreter class to do wiring
Add basic initial type objects

We now create a type context that gets passed to the parser and
evaluator to deal with type objects. Since types are no longer
identified by strings, this means that test code now also needs access
to this type context to create expected ASTs and values. Currently we
abuse the 'data' field on objects to identify the types, but soon they
will contain actual methods.
Change basic operators to use attribute lookups

This is the minimal commit required to make the tests pass, so there
are probably plenty of unimplemented operators still. This commit
reworks regular math operators to use the Python data model, defining
the acutal operations as class attributes rather than special cases in
the interpreter.