Refactoring: get rid of the compiler base class

Do not over engineer the system, we will make a base class the day we want to support multiple compiler backends.

Also add simple compiler tests