Fix add_tag behaviour in dns filter

The filter should only modify the event's fields and tags if and only if
all resolves/reverses succeed. So we clone the event, modify the new
copy and return it if all operations succeed. Otherwise the original
event is not modified.

For performance reasons we could reverse the clone logic: clone the
event, modify the original event and, it case of failure, return the
backup.

Note: this changes the dns filter behaviour towards add_tag

Fixes #1795
filter/xml fix for LOGSTASH-2246: extract non-ascii content with xpath

Fixes #1803
Set the string encoding when parsing XML

Improves upon #1790

Fixes #1803
Merge remote-tracking branch 'upstream/master'

* upstream/master:
  Set the string encoding when parsing XML
  filter/xml fix for LOGSTASH-2246: extract non-ascii content with xpath
  Fix add_tag behaviour in dns filter