**Use case**

This works:

```
SELECT * FROM hits_100m_obfuscated INTO OUTFILE 'hits.csv' FORMAT CSV
```

But I want this:

```
SELECT * FROM hits_100m_obfuscated INTO OUTFILE 'hits.csv'
```

**Describe the solution you'd like**

Every format can register file extension(s) in format factory.
If format is not specified explicitly, we can detect it automatically by file extension.
It should work for compressed files `hits.csv.gz` as well.

The following extensions should be supported at least:
csv, tsv, parquet, orc, native, json, ndjson, xml, md, avro

**Addition details**

Let's also support omitting the format argument for `file`, `url`, `s3`, `hdfs` table functions. 
registerInputFormatRegexp(factory);
    registerInputFormatJSONAsString(factory);
    registerInputFormatLineAsString(factory);
    registerInputFormatCapnProto(factory);
    registerNonTrivialPrefixAndSuffixCheckerJSONEachRow(factory);
    registerNonTrivialPrefixAndSuffixCheckerJSONAsString(factory);
    registerArrowSchemaReader(factory);
    registerParquetSchemaReader(factory);
    registerORCSchemaReader(factory);
    registerTSVSchemaReader(factory);
    registerCSVSchemaReader(factory);
    registerJSONCompactEachRowSchemaReader(factory);
    registerJSONEachRowSchemaReader(factory);
    registerNativeSchemaReader(factory);
    registerRowBinaryWithNamesAndTypesSchemaReader(factory);
    registerAvroSchemaReader(factory);
    registerProtobufSchemaReader(factory);
    registerLineAsStringSchemaReader(factory);
    registerJSONAsStringSchemaReader(factory);
    registerRawBLOBSchemaReader(factory);
    registerMsgPackSchemaReader(factory);
    registerCapnProtoSchemaReader(factory);
    registerCustomSeparatedSchemaReader(factory);
    registerRegexpSchemaReader(factory);
    registerTSKVSchemaReader(factory);
    registerValuesSchemaReader(factory);
    registerTemplateSchemaReader(factory);
}
}