renamed _addField as addField and marked as public

This change is intended to allow the addition of fields after the
initial construction.
Added element in addition to id

This change allows for more complex validation that takes into account
the element, for example using Custom Data Attributes (data-*). Also it
allows for error presentation even when the element has no id.
Added null validation to fields

This change allows to pass null as fields to constructor, so the fields
must be added afterwards with addField.