code: function()
      {
          if (this._join.length) {
  
              var results = this._results;
  
              // Functions we need to call, that return a promise, for the value
              // we're recieving after subsequent joins
              var joins = [];
  
              this._join.forEach(function(join) {
  
                  var f = function(outer) {
                      var inner = join.inner.toArray();
  
                      return inner.then(function(inner) {
                          var next = [];
                          outer.forEach(function(o) {
                              var oKey = o[join.outerKey];
  
                              // find the corresponding thing
                              var i = _(inner).find(function(i) {
                                  return i[join.innerKey] == oKey;
                              });
  
                              if (i)
                                  next.push(join.selector(o, i));
  
                          });
                          return next;
                      });
                  };
  
                  joins.push(f);
              });
  
              // Execute all of the joins, in order, feeding the result into the
              // next join. When they all are done, complete the promise for this
              // result
              return joins.reduce(Q.when, Q(results)).then(function(last) {
                  return last;
              });
  
          } else {
              return Q(this._results);
          }
      }
docs: Given our joins and other transforms, return the results. Returns a promise incase we are waiting on other stuff to be finished (ie joins)