extracted validation logic
splitted validation logic into multiple parts
Merge branch 'interlock-async-validate'
Fixing query generation error when calling save() on an Instance

When the raw value of ```id``` is stored as ```identifier``` in ```save()``` an invalid query is returned from the ```QueryGenerator```.

i.e. - Without the fix, an UPDATE query looks like this:  
```UPDATE `Users` SET `gender`='male',`email`='updated@bar.com',`updatedAt`='2013-05-29 23:33:36',`createdAt`='2013-05-29 23:33:36' WHERE 2```  

The ```WHERE 2``` is not the desired behavior. If ```id``` is wrapped in an object then the correct query is generated:  
```UPDATE `Users` SET `gender`='male',`email`='updated@bar.com',`updatedAt`='2013-05-29 23:33:36',`createdAt`='2013-05-29 23:33:36' WHERE `id`=2```
Merge pull request #656 from echong/master

Fixing a bug in query generation where 'identifier' is being stored as the raw value of the 'id' rather than being wrapped in an object.
Merge branch 'master' of github.com:sequelize/sequelize
Merge branch 'master' into milestones/2.0.0