Commit before making profound changes to Valuation and all Patterns
Pattern matching implemented, need to update Valuation to take account of that. !WON'T BUILD!

And (for future reference), I've got a bad feeling about it. In the end, moving evaluation from Variable to Valuation requires the type everywhere, which means we need to make Valuation a multi-type-aware map (something that holds values of different types while still knowing their types). Should investigate using Manifests. Even if we keep the evaluation in Variable, there is still the problem of the received arg in pattern matching (type error when calling Pattern.set) (a cast at this point should be safe though) plus we need to add a Variable symbol to compare different instances of the same variable.