Eager loading of nested associations

Not ready for merge yet. First cut at this feature.

TODO:
 - [x] Querying on nested associations
 - [x] Sorting on nested associations

TESTS:
 - [x] through -> through
 - [x] through -> hasMany
 - [ ] through -> belongsTo
 - [x] through -> hasOne
 - [ ] hasMany -> through
 - [ ] hasMany -> hasMany
 - [x] hasMany -> belongsTo
 - [ ] hasMany -> hasOne
 - [x] belongsTo -> through
 - [x] belongsTo -> hasMany
 - [ ] belongsTo -> belongsTo
 - [ ] belongsTo -> hasOne
 - [ ] hasOne -> through
 - [ ] hasOne -> hasMany
 - [ ] hasOne -> belongsTo
 - [ ] hasOne -> hasOne

```js
// OLD.. existing syntax
model.Thing.all({}, {includes: 'assoc1'}, function (err, data) {});
// Equiv to:
model.Thing.all({}, {includes: ['assoc1']}, function (err, data) {});
// Multiple assocs:
model.Thing.all({}, {includes: ['assoc1', 'assoc2']}, function (err, data) {});

// NEW! Nested assoc syntax:
model.Thing.all({}, {includes: {assoc1: 'assoc2'}}, function (err, data) {});
// Equiv to:
model.Thing.all({}, {includes: {assoc1: ['assoc2']}}, function (err, data) {});
// Further nesting:
model.Thing.all({}, {includes: {assoc1: {assoc2: 'assoc3'}}}, function (err, data) {});
// Equiv to:
model.Thing.all({}, {includes: {assoc1: {assoc2: ['assoc3']}}}, function (err, data) {});
// Go nuts:
model.Thing.all({}, {includes: {assoc1: {assoc2: ['assoc2.1', 'assoc2.2']}}}, function (err, data) {});
```

**Breaking change**: ordering on associations must be done by association name, not table name. Otherwise you'd get conflicts if loading two associations from the same table.

```js
// old behavior:
model.Event.all({}, {includes: 'participants', sort: {'people.id': 'desc'}}, function (err, data) {});
// this would conflict if eager loading two assocs that lead to the `people` table:
model.Event.all({}, {includes: ['participants', 'admins'], sort: {'people.id': 'desc'}}, function (err, data) {});

// new behavior:
model.Event.all({}, {includes: 'participants', sort: {'participants.id': 'desc'}}, function (err, data) {});
```
**implementation**:
The old "_sqlMetaData" methods have been replaced with the recursive variants in [this file](https://github.com/geddy/model/blob/nested-eager/lib/adapters/sql/query/parser.js).

The "From x x" stuff and the createLeftOuterJoin method have been replaced with a recursive createFrom method.

The EventedQueryProcessor has been rewritten to support fast recursive reification. The handleRow method is no more. Instead of iterating through the columns of each row, there's a map of precomputed pluck functions that create or look up existing model instances and attach them to their rightful owners.