MRG: Refactor: changing filename generation to a more consistent model

core-devs please review. (unfortunately a bunch of PEP-8 fixes are also there).

This patch is to demonstrate a plan to refactor filename generation and thereby simplify interface creation.

@bpinsard, @inati  - comments much appreciated

in this commit take a look at the InvWarp class in utils.py.
```
inverse_warp = File(argstr='--out=%s', name_source=['warp'],
                        hash_files=False, name_template='%s_inverse',
...
```
to use this, the interface developer should:

1. add metadata to inputspec:
name_source: indicates which field to draw a name from, this field must be the name of a File
name_template (optional): if you want to override the default _generated suffix
keep_extension (optional): if you want the extension from the input to be kept.

2. add functionality to your class or base class, to allow changing extensions specific to package or interface

```
def self._overload_extension(self, value):
     return value #do whatever you want here with the name
```
3. in the outputspec make sure the name matches that of the input spec