Optional parameter 'parents' to HdfsClient.mkdir()

This patch should not change behavior, since the optional parameters
default is to what was used previously.

The name parents was used since it is what is used by the snakebite
client.
Make HdfsTarget.move_dir() atomic again

As was said in the comments of that function, it relied on mkdir failing
if the directory already exists. This was not explicit in the code
unfortunately and the underlying behavior of mkdir() changed since
move_dir() was written.
Add raise_if_exists flag to hdfs_client.mkdir()

It is *way* to complicated to actually implement it. So I just went with
assertions to make sure that the programmers who want can explicitly
state their intent.  See spotify/luigi#393 for a discussion about this.

Oh, and I also started to use it at one place to get the ball rolling.
Push down parent and raise_if_exists flags to abc

From real life experience of how hdfs.mkdir() behavior changed due to
lack of explicitness, we think it's good for all FileSystem
implementations to encourage explicitness in their implementations of
mkdir().

Discussion in spotify/luigi#393
Sync mkdir raise_if_exists=False up to Snakebite

This will *slightly* break backwards compatibility. But the behavior was
really undefined before so.
Merge pull request #393 from Tarrasch/movedir-atomic

Make `move_dir()` atomic again
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 maintains backwards compatibility with old configuration.

This patch depend on spotify/luigi#395, so that must be merged before
this one.