Validators yield Error instance and transport raw args

This is a followup to #1000, and is a scaffolding, requires feedback.

Two issues addressed:

#### 1. Validators return an instance of Error

When validations fail they return an instance of `Error` instead of an `Object` literal. Better semantics...

#### 2. Validators transport the error args as is

Validators in *2.0.0* require type `String` as argument. This is very limiting, it is often the case where `Error` instances are thrown  (i.e. in *1.7.0*):

```js
/**
 * email validator.
 *
 * @throws {Error} If [this condition is met]
 * @this {Sequelize.Model}
 */
uv.email = function() {
  var valid = new Validator();
  valid.check(this.email)
    .len(6, 160)
    .regex(reEmail);

  if (!!valid.getErrors().length) {
    var valItem = new Error();
    valItem.message = 'Not a valid email';
    valItem.path = 'email';
    valItem.type = 'invalid';
    valItem.value = this.email;
    throw valItem;
  }
};
```

This `Error` Object needs to be transported "as-is", the Validator should not get in the way.

Thus the current scaffolding so we can see how we can solve this problem.

The change should have no side-effects except break tests that use the `deep.equal` assertion because the `Error` Object is rich in properties, plus the `__raw` key...