feature(simulator): update location hash with simulator parameters

Stores muted, rotation, and device type in the device key of the URL
hash.  Updates URL when simulator properties change.
feature(simulator): revised colors and animations

Clean up animations and colors for simulator
Merge branch 'master' into develop

* master:
  feature(simulator): revised colors and animations
  feature(simulator): update location hash with simulator parameters
chore(node_modules): remove git+https dep in package.json

npm has a fairly broken implementation of modules downloaded via git.
Just use a published npm package instead.
update build spinner
feature(simulator): smaller, faster build spinner

use a smaller, faster build spinner image
Add error handling and fixes for devkit install

Most git functionality has been wrapped with higher level APIs that
provide some level of error handling. This should prevent the end user
from seeing random unhelpful errors like `128`. There are now error
types for certain git status codes. The entire git client has been
promisified in a way that all functions can still be used with standard
node style callbacks. The main benefit of the promisification here is
asynchronous stack traces. To enable long stack traces, prefix your
devkit command with `BLUEBIRD_DEBUG=1`. The colorful stack trace
modification we were doing made the stack traces less helpful, so that
has been disabled for now.

The entire apps/Module system has also been promisified to take
advantage of the async stack traces. The setVersion function reads more
cleanly since it now utilizes higher level git APIs. The behavior of
this function has changed slightly. The forceInstall flag does not
currently have any effect. The repository is always fetched so we have
access to the latest repository state. Either a module is already on a
requested version, or it's not. If not, it is brought to the requested
version. The case where requested versions are not found is not
necessarily handled yet.

Specifying a particular ref when installing a new plugin works. The
target branch is checked out before parsing version information.
Merge branch 'develop' into feature-bug-cleanup-and-error-handling

Conflicts:
	src/apps/App.js
	src/install/index.js
showRef parser handles empty arg
Fix linting errors in install.js command
Add promisified lockfile interface and own error

The lockfile interfaces now supports promises. Just import from
util/lockfile instead. Failure to lock will result return a
FileLockerError.
Fix import errors in git client
Add promisified `exists` and IOError type

Adds `exists` util which either resolves because the file exists or is
rejected with an IOError. For example, prepare to do some work in a
folder that may or may not exist:

    exists('./dir').catch(IOError, function () {
      return mkdirp('./dir');
    }).then(function () {
      // do stuff in dir
    });
Apps functions are now promise friendly
Fix linting errors in install/index.js
Move rimraf wrapper into own file
Convert logger call to trace
Add better error handling in git client
Fix reference error in App.js
Add more trace calls in Module.js