Refactored Selection into Criteria

criteria are not necessarily bound to a specific model, and are lazily compilable.
Scopes are now chainable, and a default_scope can be used
Looks like we no longer need the ensure_table!