cleanup of compiler.py

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.