ENH: parallel context

Currently don't have support for mapping yet, but we can submit system calls or function calls now via IPython. The latter may require state updates on the engines, which is feasible from the current context. It is likely that mapping will go in relatively easily. 

From the shell:

```bash
$ echo -e "profile\tdefault" >> ~/.qiime_config
$ echo -e "n_engines\t2" >> ~/.qiime_config
$ parallel start
```

From within Python:

```python
>>> from qiime.parallel.context import context
>>> context.submit_sync('hostname')
('rl1-1-220-221-dhcp.int.colorado.edu\n', '', 0)
>>> def foo():
...     return "bar"
...

>>> context.submit_sync(foo)
'bar'
>>> def foo(a):
...     return a**2
...
>>> res = context.submit_async(foo, 5)
>>> res.result
25
```

From the shell:

```bash
$ parallel stop
```
It is already defined on the base class:

```python
def _construct_job_graph(self, *args, **kwargs):
        """Constructs the workflow graph with the jobs to execute

        Raises
        ------
        NotImplementedError
            If not overwritten in a subclass
        """
        raise NotImplementedError("This method should be overwritten by the "
                                  "subclass")
```

However, the signature is not the same for all workflows, so that is why I'm using `*args, **kwargs`. So each subclass should write its own docstring (doing it right now)