base Engine class and NullEngine implementation

This is the base Engine for compiling and processing assets.  It
defines the API for an engine and should be subclassed when creating
new engines.

This also includes the NullEngine implementation.  It simply returns
exactly what it is given and can be thought of as a - it does nothing.
This will be used as the default engine for compiling assets.