Tiny Refactor of compiler.py Pipelines

I had a hard time telling what was going on in the pipeline(s) assembly and run stage, so I did a tiny refactor on it.  I think there is more logic than can be coalesced here, but I wanted to see if this form of change was at all agreeable to folks before stomping forward.  

Includes:
  * a new class _PipelineManager which deals with building and executing pipelines.  
  * rename/grouping of a couple of helper functions to more accurate names/places
  * Doc-string format consistancy
  * PEP8 blah blah

I want to add some documentation to this PR as well, especially around the _dispatcher class that I am having a hard time grocking.  

Feedback welcome.
I know this is just a cut-and-paste, but can this line actually be reached? It seems in the loop above, the exception is re-raised because of `is_final_pipeline`.