launch: Add ScriptLauncher

ScriptLauncher collects all commands from a process group, and writes
them to a JSON file, after which a script is called with the JSON file's
path and the max_concurrency as arguments.

This easily supports more environment specific submission schemes,
without having to create a new Launcher every time.
Merge pull request #3 from melver/master

melver: Add ScriptLauncher to launch.py