The SPA system

Well, I think I finally have the spa system in a state that's ready to be code-reviewed.  :)  There's a new syntax that doesn't horribly abuse Python, and it all seems to work well on a variety of models.  

There are a few simple examples in the documentation in spa/spa.py, but it'd probably be worthwhile for me to put together some extended documentation somewhere.