Reflow large lines by manipulating the tokens directly.

This algorithm takes the token stream and creates a higher abstraction
out of it. It then uses this abstraction to re-flow the tokens. This
gives us a finer-grained handling of the elements, allowing us to make
better decisions about what to place where. It actually generates two
candidate formattings and allows the current heuristic to pick the
"best" one from them.
Apply autopep8 on itself
Remove some unused variables
Define undefined variable
Relax pylint
Allow settings aggression level
Run tests in higher aggression level
Add example that breaks
Handle all sub containers.

We weren't handling all sub containers in the 'key' situation. This was
confusing the parser and leading to it emitting the wrong bracket type
for the container. E.g. in this code:

def foo():
    return functools.reduce(operator.and_, [cls.interpret(nodelist[i]) for i in range(1,len(nodelist),2)])
Separate the elements with a space.
Parse the interior containers for the key and value of a dictionary in the same way.
Merge remote-tracking branch 'gwelymernans/master' into gw
Add to-do item
Merge remote-tracking branch 'upstream/master'
Store the comma so that we can regenerate it correctly.
Merge remote-tracking branch 'gwelymernans/master' into gw
Format