start reordering of Session initialization

the goal is to allow a clear demarcation of where we need
the audioengine and have existing data parameters (e.g. sample rate)
for the session so that we can coerce the engine (if possible)
to match to session values.

also, to rationalize construction even more and use C++
constructor syntax as much as possible.
new generic MIDI binding map for Novation Impulse 61 from Alexandre Prokoudine
many changes relating to session construction and audioengine interaction

every session member is now initialized using C++ constructor syntax

session construction reordered to clarify the split(s) between work
where the engine is not relevant and work where is it is. this
split is still not 100% obvious, but is enormously clearer than
previously.

if engine/backend are not running as session is created, and the SR
of the sample rate is known, attempt to force backend to that value.