Pool of workers

Added a new option to `smart_dispatch.py` allowing to use a pool of workers. The main reason to use this new option is when you expected your jobs to be of different durations. When a worker finishes excuting a command, it will immediately start working on the next one. Thus will reduce the number idle CPU in a node.

Basically you set the number of workers you want using `--pool N` and it will spawn as many workers to execute a common list of command (the commands are spanned by `smart_dispatch.py` as before).
I think since we are in a `with` statement, `f` is fine. It is easy and quick to see `f` correspond to what file.