Add `conda launch` 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
Alright, it now uses `getattr` instead.