Moved to the contrib module and added support for with statement.

I refactored the whole file using the hdfs library instead of whoops because apparently whoops has some problems when uploading files.

I also added a basic WebHdfsTarget that provides basic read and write operations. The WebHdfsTarget is based on the S3Target. A simple example would be:

```
from luigi.contrib import webhdfs

target = webhdfs.WebHdfsTarget('TEST/file.py')

output = target.open('w')
output.write('pew pew pew\npow pow pow\n')
output.write('piw piw piw\npow pow pow')
output.close()

target = webhdfs.WebHdfsTarget('TEST/file.py')
input = target.open('r')
print input.read()
print [i for i in input]
input.close()
```
Or using the with statement
```
with target.open('w') as output:
    for i in range(10000):
        output.write('%i\n' % i)

with target.open('r') as input:
    print [i for i in input]
```
Merge branch 'patch-1' of github.com:danielfrg/luigi into patch-1