Create ChainedHdfsClient for fallbacking clients

The intended use case is that a company (like Spotify) is going to
switch over from a slow HdfsClient to a much faster SnakebiteHdfsClient.
To avoid surprises if say the SnakebiteHdfsClient can't handle some
corner case, then a given fallback will be used.

Example instantiation:

        client = ChainedHdfsClient([SnakebiteHdfsClient(), HdfsClient()])

A following commit will integrate the ChainedHdfsClient in the
configuration.
Overhaul the hdfs client configuration

So the old syntax was something very hackish and very special-case oriented.

    [hdfs]
    snakebite_autoconfig: true

Now it becomes:

    [hdfs]
    client: snakebite

This patch also adds the configuration:

    [hdfs]
    client: snakebite_with_hadoopcli_fallback

This patch lets maintains backwards compatibility with all old
configuration methods.