Workflow object

The commit history has been blown away as this has bounced around from project to project unfortunately. A further todo item is document the hell out of this with tutorial/example code. I can do that now, or later, the benefit of later is that having additional objects that leverage this code base in place will highlight its use cases. 

This has not changed substantially other than adding in support for ``not_none``.