Fix edge case in json filter if source == target

This now permits:

  filter {
    json { source => "example" target => "example" }
  }

Also fixed a bug where @timestamp would be parsed as a Time even if it
wasn't intended to be at the timestamp of the event.

One example is like so:

    # This text in field 'example':
    '{ "fancy": "pants", "@timestamp": "whatever" }'

    # This filter:
    filter {
      json { source => "example" target => "example" }
    }

Previously, this would attempt to call 'merge!' on the 'example' field
which would fail because at the time it was a string. Now it works :)
Only do @timestamp parsing if 'target' is set.
Merge pull request #1022 from jordansissel/json-filter-fixes

Json filter fixes