Add `conda run` command, more `--json` flags

    $ conda launch -h
    usage: conda launch [-h] [COMMAND]
    
    Launches an application installed with Conda.
    
    positional arguments:
    COMMAND     package to launch
    
    optional arguments:
    -h, --help  show this help message and exit

    $ conda launch ipython-qtconsole  
    Fetching package metadata: ...
    Started app. Some apps may take a while to finish loading.

    $ conda launch ipython-qtconsole --json
    {
      "fn": "ipython-qtconsole-2.1.0-py34_0.tar.bz2"
    }

    $ conda launch conda                   
    Fetching package metadata: ...
    Error: Not an application: conda-3.5.5-py34_0.tar.bz2

    $ conda launch conda --json
    {
      "error": "Not an application: conda-3.5.5-py34_0.tar.bz2"
    }

    $ conda launch nonexistent_package       
    Fetching package metadata: ...
    Error: App nonexistent_package not installed.

    $ conda launch nonexistent_package --json
    {
      "error": "App nonexistent_package not installed."
    }

    $ conda launch ipython-qtconsole-2.1.0-py34_0.tar.bz2
    Started app. Some apps may take a while to finish loading.

    $ conda launch ipython-qtconsole-2.1.0-py34_0.tar.bz2 --json
    {
      "fn": "ipython-qtconsole-2.1.0-py34_0.tar.bz2"
    }
    
TODO:

- [x] `conda info package1 package2 ... --json`
- [x] `conda list --json` (fixes #713)
- [x] `conda info ipython-qtconsole-2.1.0-py34_0.tar.bz2 [--json]`?(retrieve metadata such as install status, features,...)
- [x] `conda search --json`
- ~~[ ] `create`~~
- [x] `install` (fixes #773)
- [x] `install` when a hint is generated
- [x] `update`
- [x] `update --json` with `No packages found matching` error
- [x] `remove`
- [x] `config`
- [x] `clean`
- [x] Handle progressbars (requires parsing by client; uses JSON messages flushed to stdout separated by nulls)
- [x] Add tests
- [ ] Some way to get all info from `conda.config` (perhaps `conda info --json` should include that data)
- [x] Windows has additional printing in `install.py` that needs to be handled
- [x] Handle locking with `--json`
- [x] Printing in `resolve.py`
- [x] More informative JSON errors? (e.g. provide an error code/exception type to make it easier for APIs to raise an appropriate exception)
- [x] Handle HTTP errors in JSON
- [x] Resolve this `launch` vs IPython Notebook `conda-launch`
- ~~[ ] Figure out how to trap `yaml` ImportError in `main_config`~~ can't be trapped - conda won't start at all.
- [x] `conda run` with packages not in the index (e.g. conda-ui)
I don't want to have to remember to update this list if I introduce a new logger. Is there a way to automatically do this for all loggers that start with "conda"? We can change the ones that don't so that they do. Or maybe just suppress all loggers of any name.