Engine cleanups

Instead of having many of the instance local variables
be created in the __init__ method, instead create them
during the compilation stage where most of these variables
are actually used. This allows for the multi-threaded
engine to not have to setup an instance variable before the
parent constructor is called and seems cleaner in general.

Ensure that a engine that is not compiled can not be
suspended since it seems like an inappropriate action for an
engine to allow when it has not been compiled.

Change-Id: I89c4555832e833e588bc4ac6b912be0c5b886831
Merge "Engine cleanups"