**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. 
config().setString("database", options["database"].as<std::string>()
    if (options.count("config-file"))
        config().setString("config-file", options["config-file"].as<std::string>()
    if (options.count("queries-file"))
        queries_files = options["queries-file"].as<std::vector<std::string>>(
    if (options.count("multiline"))
        config().setBool("multiline", true
    if (options.count("multiquery"))
        config().setBool("multiquery", true
    if (options.count("ignore-error"))
        config().setBool("ignore-error", true
    if (options.count("format"))
        config().setString("format", options["format"].as<std::string>()
    if (options.count("vertical"))
        config().setBool("vertical", true
    if (options.count("stacktrace"))
        config().setBool("stacktrace", true
    if (options.count("print-profile-events"))
        config().setBool("print-profile-events", true
    if (options.count("profile-events-delay-ms"))
        config().setInt("profile-events-delay-ms", options["profile-events-delay-ms"].as<UInt64>()
    if (options.count("progress"))
        config().setBool("progress", true
    if (options.count("echo"))
        config().setBool("echo", true
    if (options.count("disable_suggestion"))
        config().setBool("disable_suggestion", true
    if (options.count("suggestion_limit"))
        config().setInt("suggestion_limit", options["suggestion_limit"].as<int>()
    if (options.count("highlight"))