Moving the compiling/translating code into a separate compiler class

It seems more logical to wrap the compile step in it's own class; any Compiler implementation
can be injected, and the implementation will not be constrained to tokenizing and building.

This change has also simplified the Pattern interface, as the constructor requires one less
argument.

Unit tests have been adjusted, as the mocking requirements have changed.
README tinkering