Verify ls/rm behaviour in removing directory trees

Tl;dr: you should end the path glob with a directory separator / so that
all filesystem implementations can find the files that you specify.
Remove {...} set creation for python 2.6 support
Python 2.7 testing
SandboxedTestCase.maketree
HadoopFilesystem removal with(out) path slashes

rm path/to/dir   - Remove the directory and its contents
rm path/to/dir/  - Remove the directory and its contents
rm path/to/dir/* - Keep the directory but remove its contents
Test LocalFilesystem removal with(out) path slashes

rm path/to/dir   - Remove the directory and its contents
rm path/to/dir/  - Remove the directory and its contents
rm path/to/dir/* - Keep the directory but remove its contents
S3Filesystem.{ls,rm} "directory" behaviours

ls path/to/dir   - Will list the contents of `ls path/to/dir` if
                   path/to/dir is not actually a file. That is: if
                   path/to/dir does not exist or it's a zero-byte file
                   we'll try looking in path/to/dir/*.

                   Related: path_exists is based on ls and where the
                   keys my/files/{a,b,c,d}.txt exist then my/ and
                   my/files shall too (even though the keys are not
                   defined).

rm path/to/dir   - Will remove any keys within path/to/dir/* if
                   path/to/dir is not itself a key of more than zero
                   bytes.
rm path/to/dir/  - Will remove any keys within path/to/dir/* regardless
                   of whether path/to/dir exists as a key in itself.
                   This is the safest way to use rm but still not the
                   most common because most path-handling functions
                   don't typically return a trailing slash.
rm path/to/dir/* - As above.
S3: Don't ignore zero-byte files

Where there is a key which exists in the form s3://bucket/my_key and
s3://bucket/my_key/my_sub_key then the existance of the "file" overrides
that of the "directory". Different, however, is that
s3://bucket/my_key/* can list the child keys, which hadoop wouldn't.
Remove HadoopFilesystem.path_exists debug
Clarify why we discard keys in HadoopFilesystem

It's because there cannot be a directory and a file of the same name.
The existence of a file overrules the existence of a directory.
test_hadoop.test_rm_tree_star_files s/by/but/
Remove redundant os.path.isdir tests from test_s3
Remove unused var from mockhadoop.find_hdfs_files
test_local.test_rm_tree_star_files s/by/but/
Sort sanbox maketree test outputs
Merge pull request #17 from duedil-ltd/feature/s3-directories

Verify ls/rm behaviour in removing directory trees