title: Bookshelf.js - unexpected behaviour with transactions
body: <p>I've been looking at this for days and I can't come to any rational explanation yet. So, a quick background: I'm using bookshelfjs and I want to use transactions to perform 3 inserts and upon the save, add some additional references. To get things to work the way I want them to, I used bluebird Promise.</p>
  
  <pre><code>router.get('/transaction', function(req, res){
  
      bookshelf.transaction(function(t){
  
          return Promise.all([
              //this block is part of transaction!
              new Participant({name: 'Transaction John'}).save(null, {transacting: t}),
              new Participant({name: 'Transaction Doe'}).save(null, {transacting: t}),
              new Town({town_number: 1000, town_title: 'LA'}).save(null, {transacting: t})
          ]).spread(function(p1, p2, t1){
  
              return Promise.all([ 
                  /*
                      this block, however, is not. second address save fails, because I use "p4.get('id')" which does not exists
                      the first address is saved, the second is not; but since I use transactions, nothing should be saved!
                  */
                  new Address({
                          house_number: 3,
                          street_name: 'Transaction street name',
                          town_id: t1.get('id'),
                          participant_id: p1.get('id')        
                      }).save(null, {transacting: t}),    
  
                  new Address({
                          house_number: 3,
                          street_name: 'Transaction street name 2',
                          town_id: t1.get('id'),
                          participant_id: p4.get('id')        
                      }).save(null, {transacting: t})
              ]);
          });
  
      }).then(function(){
          res.json('success');        
      }).catch(function(error){
          console.log('error');
          res.json(error);
      });
  
  });
  </code></pre>
  
  <p>Here are the queries for the above code:</p>
  
  <pre><code>{ __cid: '__cid1', sql: 'begin transaction;' }
  { __cid: '__cid1',
    method: 'insert',
    options: undefined,
    bindings: [ 'Transaction John' ],
    sql: 'insert into "participants" ("name") values (?)' }
  { __cid: '__cid1',
    method: 'insert',
    options: undefined,
    bindings: [ 'Transaction Doe' ],
    sql: 'insert into "participants" ("name") values (?)' }
  { __cid: '__cid1',
    method: 'insert',
    options: undefined,
    bindings: [ 1000, 'LA' ],
    sql: 'insert into "towns" ("town_number", "town_title") values (?, ?)' }
  [ReferenceError: p4 is not defined]
  { __cid: '__cid1', sql: 'rollback;' }
  { __cid: '__cid1',
    method: 'insert',
    options: undefined,
    bindings: [ 3, 1, 'Transaction street name', 1 ],
    sql: 'insert into "addresses" ("house_number", "participant_id", "street_name"
  , "town_id") values (?, ?, ?, ?)' }
  </code></pre>
  
  <p>As can be seen from the code above, the rollback occurs, which is in accordance with the code above, but after the rollback, there's an additional insert. This is NOT what should be happening.</p>
  
  <p>Why does Promise.all work in the first part of the code and in the second it appears as if it's not? Is there a bug or am I not understanding something correctly? </p>
  
  <p>Thank you for your responses!</p>