Transform via models

Adds .where() and .join() stuff to SQLQuery().  This greatly simplifies
api.py but should remain flexible enough, I think.

Results from SQLQuery are now models, but doing a obj.to_dict() on the
top level objects recurses and converts all objects to dictionaries.
Join security_groups with instance.

Requires joining a table just to get associations.. but yet no data
should be returned from that table.

sql-a joins security_groups.rules also... but I cannot find any use of
rules being accessed from security group objects that were joined with
instances.

It'd be nasty to implement, so I hope we don't need to!