Create and use a new compilation module

To allow compilation into an execution graph to be done via
other methods than our pattern flattening concept create a module
that defines what a compiler should do and what the expected return
type from compilation of a atom/flow is and how it will be used by
our existing engine types.

Part of blueprint plug-engine

Change-Id: I324172571f36a574195bcdeac71c6ec14cb11944
Merge "Create and use a new compilation module"