Prototype k rewrite machine

I call it K rewrite machine but it's really just a simple interpreter so far. Eventually, this would become a a fast abstract rewrite machine and the starting point of native code generation.
This is a limitation of the current implementation which is shared by PatternMatcher and SymbolicUnifier as well. They are all implemented as assertions. I prefer to keep it like this for now because it's easier for me to debug. However, we should definitely change all assertions in the Java backend to emit proper error message before we decide to make it the default backend.