Use tv4 to validate factories and custom properties

Now, whenever `factory` is called, the object that it generates is
validated against the schema using the tv4 [1] library. This means if
you pass invalid data, it will throw an `InvalidFactory` error, but only
if `options.validateProperties` is set to true. This can be done in the
constructor:

```
new Dorante(schema, { validateProperties: true });
```

Or just with the instance:

```
dorante.options.validateProperties = true;
```

[1]: https://github.com/geraintluff/tv4