Add a basic engine

This introduces a basic engine with some common basic functionality for other engines to extend.