### Description

I would like to be able to parse unix epoch timestamps that contain a fractional value with nanosecond precision (e.g. `1647479604.334549372`). These currently parse, but only millisecond precision is retained. Given that the date processor supports nanosecond output formats, I think it would be good to retain the nanosecond precision.

```
POST _ingest/pipeline/_simulate
{
  "pipeline": {
    "processors": [
      {
        "date": {
          "field": "message",
          "formats": [
            "UNIX"
          ],
          "output_format": "yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSSXXX"
        }
      }
    ]
  },
  "docs": [
    {
      "_source": {
        "message": "1647479604.334549372"
      }
    }
  ]
}
```

Output:

```
{
  "docs" : [
    {
      "doc" : {
        "_index" : "_index",
        "_id" : "_id",
        "_source" : {
          "@timestamp" : "2022-03-17T01:13:24.334000000Z", # NOTE: This only contains millisecond precision.
          "message" : "1647479604.334549372"
        },
        "_ingest" : {
          "timestamp" : "2022-04-23T02:15:28.600856847Z"
        }
      }
    }
  ]
}
```

My assumption is that the cast to long truncates the everything after the millis at

https://github.com/elastic/elasticsearch/blob/ce6d2e7f31ab7c7c36cc49eb708549b64f68086a/modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateFormat.java#L49


modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/DateFormat.java
* 2.0 and the Server Side Public License, v 1; you may not use this file except
 * in compliance with, at your election, the Elastic License 2.0 or the Server
 * Side Public License, v 1.
 */
package org.elasticsearch.ingest.common;
import org.elasticsearch.common.time.DateFormatter;
import org.elasticsearch.common.time.DateFormatters;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.WeekFields;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.function.Function;
import static java.time.temporal.ChronoField.DAY_OF_MONTH;
import static java.time.temporal.ChronoField.HOUR_OF_DAY;
import static java.time.temporal.ChronoField.MINUTE_OF_DAY;
import static java.time.temporal.ChronoField.MONTH_OF_YEAR;
import static java.time.temporal.ChronoField.NANO_OF_SECOND;
import static java.time.temporal.ChronoField.SECOND_OF_DAY;
enum DateFormat {
    Iso8601 {
        @Override
        Function<String, ZonedDateTime> getFunction(String format, ZoneId timezone, Locale locale) {
            return (date) -> {