Make peer assessment an optional step.

This also creates the AssessmentWorkflowStep model to track all steps for new workflows. It does work in both self-only scenarios and peer -> self problems, but it still needs a fair amount of work. Namely:

* a lot of broken tests
* some display oddities on the peer step during (peer, self) workflows
* have not tested to see if there are concurrency issues with step model creation under load (i *think* this is ok, but again, haven't tested it).
* it doesn't do anything to prevent or gracefully handle someone changing the assessment steps in the problem itself after release.

@stephensanchez 

-- UPDATE by @stephensanchez --
* Fixed tests
* Updated JS to avoid AJAX loading issues
* Added validation to disallow changing assessment steps after a problem has been released.
* Additional python and JS testing. 

! Still need some concurrency tests; should test by end of week with Peer-Only as well. 

@wedaly