Improved validation flexibility

The changes in this pull request will allow to:
- Create a validator with no fields by passing null.
- Write code that call the validator to add fields dynamically.
- Have access to the elements in the validator, useful to use data-* attributes.
- Have access to the elements in the main validation callback.
- Allows for better error presentation even when there is no id available.