Feature: Transaction as an Instance option

## Why:
`.findOrCreate()` is using, since `2.0.0-dev13`, a transaction to create the instance on database. Problem is that hooks aren't receiving options from methods, that means that there is no way to determine if an instance is coming within or not from a transactional query. I did not read the #2240, so i opened the issue #2241 and have dedicated some time to study a quite more of **sequelize**. Happens that my first idea was to do what @overlookmotel said on #2240, in fact, i've changed the same as him on code, until i've realised that it would be a huge BC and a bigger headache for developers since they have to check if the instance is running on an instance or not, so the problem aren't the options directly but yes the transaction detection.

Then this idea comes up into my mind, why not to implement the current transaction into each instance, and remove them when it has been completed or rolled back up?

This would fix also the problem of saying to all methods the transaction to use, it does seem to be quite clever at first look, but it looses it glance over promises.

## Expected result
Avoid passing `transaction` every time we do a step, so if we create or search some instances within a transaction, all other steps will run on that instance until **we supply another on options** or **transaction is finished**.

Example:

```js

var s = this.sequelize,
      User = s.define( 'User', { ... });

s.transaction()
  .then(function ( t ) {
    return User.find( 3 , { transaction: t });
  })
  .then(function ( user ) {
    user.someattr = 'lol';
    return user.save();
  })
  .then(function ( user ) {
    return user.reload();
  })
  .then(function ( user ) {
    return user.options.transaction.commit();
  });

// or

s.transaction()
  .then(function ( t ) {
    return User.build({}, { transaction: t } ); // or .create
  })
  .then(function ( user ) {
    user.someattr = 'lol';
    return user.save();
  })
  .then(function ( user ) {
    return user.reload();
  })
  .then(function ( user ) {
    return user.options.transaction.commit();
  });

```
EDIT:
`.create()`, `.save()` and functions that uses this methods are auto-detecting transaction.
`.find()` is the only that isn't returning instances with the transaction.
Utils._.isObject? Since we're using _ anyway...