diff --git a/node_modules/liftoff/CHANGELOG b/node_modules/liftoff/CHANGELOG
new file mode 100644
index 0000000..e612f4e
--- /dev/null
+++ b/node_modules/liftoff/CHANGELOG
@@ -0,0 +1,127 @@
+v2.2.2:
+  date: 2016-05-20
+  changes:
+    - Update dependencies.
+v2.2.1:
+  date: 2016-03-23
+  changes:
+    - Make sure that v8 flags are passed properly through the `respawn` event
+v2.1.0:
+  date: 2015-05-20
+  changes:
+    - Use rechoir to autoload modules.
+v2.0.3:
+  date: 2015-03-31
+  changes:
+    - Internal bugfix, don't wrap callback error in another error, idiot.
+v2.0.2:
+  date: 2015-02-24
+  changes:
+    - Support process.env.NODE_PATH when resolving module.
+v2.0.1:
+  date: 2015-02-01
+  changes:
+    - Find modulePath correctly when devving against yourself.
+v2.0.0:
+  date: 2015-01-15
+  changes:
+    - Rename `nodeFlags` to `v8Flags` and make it async.
+v1.0.4:
+  date: 2015-01-04
+  changes:
+    - Detect config extension using basename, not full path.
+v1.0.0:
+  date: 2014-12-16
+  changes:
+    - Update dependencies
+v0.13.6:
+  date: 2014-11-07
+  changes:
+    - Don't include artwork on npm.
+v0.13.5:
+  date: 2014-10-10
+  changes:
+    - Only attempt to resolve the real path of configFile if it is actually a symlink.
+v0.13.4:
+  date: 2014-10-07
+  changes:
+    - Set configBase to the directory of the symlink, not the directory of its real location.
+v0.13.3:
+  date: 2014-10-06
+  changes:
+    - Return the real location of symlinked config files.
+v0.13.2:
+  date: 2014-09-12
+  changes:
+    - Include flags in respawn event. I really miss `npm publish --force`.
+v0.13.1:
+  date: 2014-09-12
+  changes:
+    - Slight performance tweak.
+v0.13.0:
+  date: 2014-09-12
+  changes:
+    - Support passing flags to node with `nodeFlags` option.
+v0.12.1:
+  date: 2014-06-27
+  changes:
+    - Support preloading modules for compound extensions like `.coffee.md`.
+v0.12.0:
+  date: 2014-06-27
+  changes:
+    - Respect order of extensions when searching for config.
+    - Rename `configNameRegex` environment property to `configNameSearch`.
+v0.11.3:
+  date: 2014-06-09
+  changes:
+    - Make cwd match configBase if cwd isn't explicitly provided
+v0.11.2:
+  date: 2014-06-04
+  changes:
+    - Regression fix: coerce preloads into array before attempting to push more
+v0.11.1:
+  date: 2014-06-02
+  changes:
+    - Update dependencies.
+v0.11.0:
+  date: 2014-05-27
+  changes:
+    - Refactor and remove options parsing.
+v0.10.0:
+  date: 2014-05-06
+  changes:
+    - Remove `addExtension` in favor of `extension` option.
+    - Support preloading modules based on extension.
+v0.9.7:
+  date: 2014-04-28
+  changes:
+    - Locate local module in cwd even if config isn't present.
+v0.9.6:
+  date: 2014-04-02
+  changes:
+    - Fix regression where external modules are not properly required.
+    - Ignore configPathFlag / cwdFlag if the value isn't a string
+v0.9.3:
+  date: 2014-02-28
+  changes:
+    - Fix regression where developing against self doesn't correctly set cwd.
+v0.9.0:
+  date: 2014-02-28
+  changes:
+    - Use liftoff instance as context (`this`) for launch callback.
+    - Support split --cwd and --configfile locations.
+    - Rename `configLocationFlag` to `configPathFlag`
+    - Support node 0.8+
+v0.8.7:
+  date: 2014-02-24
+  changes:
+    - Pass environment as first argument to `launch`.
+v0.8.5:
+  date: 2014-02-19
+  changes:
+    - Implement `addExtensions` option.
+    - Default to `index.js` if `modulePackage` has no `main` property.
+v0.8.4:
+  date: 2014-02-05
+  changes:
+    - Initial public release.
diff --git a/node_modules/liftoff/LICENSE b/node_modules/liftoff/LICENSE
new file mode 100644
index 0000000..a55f5b7
--- /dev/null
+++ b/node_modules/liftoff/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2014 Tyler Kellen
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/liftoff/README.md b/node_modules/liftoff/README.md
new file mode 100644
index 0000000..892f03d
--- /dev/null
+++ b/node_modules/liftoff/README.md
@@ -0,0 +1,451 @@
+<p align="center">
+  <a href="http://liftoffjs.com">
+    <img height="100" width="297" src="https://cdn.rawgit.com/tkellen/js-liftoff/master/artwork/liftoff.svg"/>
+  </a>
+</p>
+
+# liftoff [![Build Status](http://img.shields.io/travis/js-cli/js-liftoff.svg?label=travis-ci)](http://travis-ci.org/js-cli/js-liftoff) [![Build status](https://img.shields.io/appveyor/ci/phated/js-liftoff.svg?label=appveyor)](https://ci.appveyor.com/project/phated/js-liftoff)
+
+
+> Launch your command line tool with ease.
+
+[![NPM](https://nodei.co/npm/liftoff.png)](https://nodei.co/npm/liftoff/)
+
+## What is it?
+[See this blog post](http://weblog.bocoup.com/building-command-line-tools-in-node-with-liftoff/), [check out this proof of concept](https://github.com/js-cli/js-hacker), or read on.
+
+Say you're writing a CLI tool.  Let's call it [hacker](https://github.com/js-cli/js-hacker).  You want to configure it using a `Hackerfile`.  This is node, so you install `hacker` locally for each project you use it in.  But, in order to get the `hacker` command in your PATH, you also install it globally.
+
+Now, when you run `hacker`, you want to configure what it does using the `Hackerfile` in your current directory, and you want it to execute using the local installation of your tool.  Also, it'd be nice if the `hacker` command was smart enough to traverse up your folders until it finds a `Hackerfile`&mdash;for those times when you're not in the root directory of your project.  Heck, you might even want to launch `hacker` from a folder outside of your project by manually specifying a working directory.  Liftoff manages this for you.
+
+So, everything is working great.  Now you can find your local `hacker` and `Hackerfile` with ease.  Unfortunately, it turns out you've authored your `Hackerfile` in coffee-script, or some other JS variant.  In order to support *that*, you have to load the compiler for it, and then register the extension for it with node.  Good news, Liftoff can do that, and a whole lot more, too.
+
+## API
+
+### constructor(opts)
+
+Create an instance of Liftoff to invoke your application.
+
+An example utilizing all options:
+```js
+const Hacker = new Liftoff({
+  name: 'hacker',
+  processTitle: 'hacker',
+  moduleName: 'hacker',
+  configName: 'hackerfile',
+  extensions: {
+    '.js': null,
+    '.json': null,
+    '.coffee': 'coffee-script/register'
+  },
+  v8flags: ['--harmony'] // or v8flags: require('v8flags')
+});
+```
+
+#### opts.name
+
+Sugar for setting `processTitle`, `moduleName`, `configName` automatically.
+
+Type: `String`  
+Default: `null`
+
+These are equivalent:
+```js
+const Hacker = Liftoff({
+  processTitle: 'hacker',
+  moduleName: 'hacker',
+  configName: 'hackerfile'
+});
+```
+```js
+const Hacker = Liftoff({name:'hacker'});
+```
+
+#### opts.moduleName
+
+Sets which module your application expects to find locally when being run.
+
+Type: `String`  
+Default: `null`
+
+#### opts.configName
+
+Sets the name of the configuration file Liftoff will attempt to find.  Case-insensitive.
+
+Type: `String`  
+Default: `null`
+
+#### opts.extensions
+
+Set extensions to include when searching for a configuration file.  If an external module is needed to load a given extension (e.g. `.coffee`), the module name should be specified as the value for the key.
+
+Type: `Object`  
+Default: `{".js":null,".json":null}`
+
+**Examples:**
+
+In this example Liftoff will look for `myappfile{.js,.json,.coffee}`.  If a config with the extension `.coffee` is found, Liftoff will try to require `coffee-script/require` from the current working directory.
+```js
+const MyApp = new Liftoff({
+  name: 'myapp',
+  extensions: {
+    '.js': null,
+    '.json': null,
+    '.coffee': 'coffee-script/register'
+  }
+});
+```
+
+In this example, Liftoff will look for `.myapp{rc}`.
+```js
+const MyApp = new Liftoff({
+  name: 'myapp',
+  configName: '.myapp',
+  extensions: {
+    'rc': null
+  }
+});
+```
+
+In this example, Liftoff will automatically attempt to load the correct module for any javascript variant supported by [interpret](https://github.com/js-cli/js-interpret) (as long as it does not require a register method).
+
+```js
+const MyApp = new Liftoff({
+  name: 'myapp',
+  extensions: require('interpret').jsVariants
+});
+```
+#### opts.v8flags
+
+Any flag specified here will be applied to node, not your program.  Useful for supporting invocations like `myapp --harmony command`, where `--harmony` should be passed to node, not your program. This functionality is implemented using [flagged-respawn](http://github.com/js-cli/js-flagged-respawn). To support all v8flags, see [v8flags](https://github.com/js-cli/js-v8flags).
+
+Type: `Array|Function`  
+Default: `null`
+
+If this method is a function, it should take a node-style callback that yields an array of flags.
+
+#### opts.processTitle
+
+Sets what the [process title](http://nodejs.org/api/process.html#process_process_title) will be.
+
+Type: `String`  
+Default: `null`
+
+#### opts.completions(type)
+
+A method to handle bash/zsh/whatever completions.
+
+Type: `Function`  
+Default: `null`
+
+#### opts.configFiles
+
+An object of configuration files to find. Each property is keyed by the default basename of the file being found, and the value is an object of [path arguments](#path-arguments) keyed by unique names.
+
+__Note:__ This option is useful if, for example, you want to support an `.apprc` file in addition to an `appfile.js`. If you only need a single configuration file, you probably don't need this. In addition to letting you find multiple files, this option allows more fine-grained control over how configuration files are located.
+
+Type: `Object`  
+Default: `null`
+
+#### Path arguments
+
+The [`fined`](https://github.com/js-cli/fined) module accepts a string representing the path to search or an object with the following keys:
+
+* `path` __(required)__
+
+  The path to search. Using only a string expands to this property.
+
+  Type: `String`  
+  Default: `null`
+
+* `name`
+
+  The basename of the file to find. Extensions are appended during lookup.
+
+  Type: `String`  
+  Default: Top-level key in `configFiles`
+
+* `extensions`
+
+  The extensions to append to `name` during lookup. See also: [`opts.extensions`](#optsextensions).
+
+  Type: `String|Array|Object`  
+  Default: The value of [`opts.extensions`](#optsextensions)
+
+* `cwd` 
+
+  The base directory of `path` (if relative).
+
+  Type: `String`  
+  Default: The value of [`opts.cwd`](#optscwd)
+
+* `findUp`
+
+  Whether the `path` should be traversed up to find the file.
+
+  Type: `Boolean`  
+  Default: `false`
+
+**Examples:**
+
+In this example Liftoff will look for the `.hacker.js` file relative to the `cwd` as declared in `configFiles`.
+```js
+const MyApp = new Liftoff({
+  name: 'hacker',
+  configFiles: {
+    '.hacker': {
+      cwd: '.'
+    }
+  }
+});
+```
+
+In this example, Liftoff will look for `.hackerrc` in the home directory.
+```js
+const MyApp = new Liftoff({
+  name: 'hacker',
+  configFiles: {
+    '.hacker': {
+      home: {
+        path: '~',
+        extensions: {
+          'rc': null
+        }
+      }
+    }
+  }
+});
+```
+
+In this example, Liftoff will look in the `cwd` and then lookup the tree for the `.hacker.js` file.
+```js
+const MyApp = new Liftoff({
+  name: 'hacker',
+  configFiles: {
+    '.hacker': {
+      up: {
+        path: '.',
+        findUp: true
+      }
+    }
+  }
+});
+```
+
+In this example, the `name` is overridden and the key is ignored so Liftoff looks for `.override.js`.
+```js
+const MyApp = new Liftoff({
+  name: 'hacker',
+  configFiles: {
+    hacker: {
+      override: {
+        path: '.',
+        name: '.override'
+      }
+    }
+  }
+});
+```
+
+In this example, Liftoff will use the home directory as the `cwd` and looks for `~/.hacker.js`.
+```js
+const MyApp = new Liftoff({
+  name: 'hacker',
+  configFiles: {
+    '.hacker': {
+      home: {
+        path: '.',
+        cwd: '~'
+      }
+    }
+  }
+});
+```
+
+## launch(opts, callback(env))
+Launches your application with provided options, builds an environment, and invokes your callback, passing the calculated environment as the first argument.
+
+##### Example Configuration w/ Options Parsing:
+```js
+const Liftoff = require('liftoff');
+const MyApp = new Liftoff({name:'myapp'});
+const argv = require('minimist')(process.argv.slice(2));
+const invoke = function (env) {
+  console.log('my environment is:', env);
+  console.log('my cli options are:', argv);
+  console.log('my liftoff config is:', this);
+};
+MyApp.launch({
+  cwd: argv.cwd,
+  configPath: argv.myappfile,
+  require: argv.require,
+  completion: argv.completion
+}, invoke);
+```
+
+#### opts.cwd
+
+Change the current working directory for this launch. Relative paths are calculated against `process.cwd()`.
+
+Type: `String`  
+Default: `process.cwd()`
+
+**Example Configuration:**
+```js
+const argv = require('minimist')(process.argv.slice(2));
+MyApp.launch({
+  cwd: argv.cwd
+}, invoke);
+```
+
+**Matching CLI Invocation:**
+```
+myapp --cwd ../
+```
+
+#### opts.configPath
+
+Don't search for a config, use the one provided. **Note:** Liftoff will assume the current working directory is the directory containing the config file unless an alternate location is explicitly specified using `cwd`.
+
+Type: `String`  
+Default: `null`
+
+**Example Configuration:**
+```js
+var argv = require('minimist')(process.argv.slice(2));
+MyApp.launch({
+  configPath: argv.myappfile
+}, invoke);
+```
+
+**Matching CLI Invocation:**
+```
+myapp --myappfile /var/www/project/Myappfile.js
+```
+
+**Examples using `cwd` and `configPath` together:**
+
+These are functionally identical:
+```
+myapp --myappfile /var/www/project/Myappfile.js
+myapp --cwd /var/www/project
+```
+
+These can run myapp from a shared directory as though it were located in another project:
+```
+myapp --myappfile /Users/name/Myappfile.js --cwd /var/www/project1
+myapp --myappfile /Users/name/Myappfile.js --cwd /var/www/project2
+```
+
+#### opts.require
+
+A string or array of modules to attempt requiring from the local working directory before invoking the launch callback.
+
+Type: `String|Array`  
+Default: `null`
+
+**Example Configuration:**
+```js
+var argv = require('minimist')(process.argv.slice(2));
+MyApp.launch({
+  require: argv.require
+}, invoke);
+```
+
+**Matching CLI Invocation:**
+```js
+myapp --require coffee-script/register
+```
+
+#### opts.forcedFlags
+
+Allows you to force node or V8 flags during the launch. This is useful if you need to make sure certain flags will always be enabled or if you need to enable flags that don't show up in `opts.v8flags` (as these flags aren't validated against `opts.v8flags`).
+
+If this is specified as a function, it will receive the built `env` as its only argument and must return a string or array of flags to force.
+
+Type: `String|Array|Function`  
+Default: `null`
+
+**Example Configuration:**
+```js
+MyApp.launch({
+  forcedFlags: ['--trace-deprecation']
+}, invoke);
+```
+
+**Matching CLI Invocation:**
+```js
+myapp --trace-deprecation
+```
+
+#### callback(env)
+
+A function to start your application.  When invoked, `this` will be your instance of Liftoff. The `env` param will contain the following keys:
+
+- `cwd`: the current working directory
+- `require`: an array of modules that liftoff tried to pre-load
+- `configNameSearch`: the config files searched for
+- `configPath`: the full path to your configuration file (if found)
+- `configBase`: the base directory of your configuration file (if found)
+- `modulePath`: the full path to the local module your project relies on (if found)
+- `modulePackage`: the contents of the local module's package.json (if found)
+- `configFiles`: an object of filepaths for each found config file (filepath values will be null if not found)
+
+### events
+
+#### require(name, module)
+
+Emitted when a module is pre-loaded.
+
+```js
+var Hacker = new Liftoff({name:'hacker'});
+Hacker.on('require', function (name, module) {
+  console.log('Requiring external module: '+name+'...');
+  // automatically register coffee-script extensions
+  if (name === 'coffee-script') {
+    module.register();
+  }
+});
+```
+
+#### requireFail(name, err)
+
+Emitted when a requested module cannot be preloaded.
+
+```js
+var Hacker = new Liftoff({name:'hacker'});
+Hacker.on('requireFail', function (name, err) {
+  console.log('Unable to load:', name, err);
+});
+```
+
+#### respawn(flags, child)
+
+Emitted when Liftoff re-spawns your process (when a [`v8flags`](#optsv8flags) is detected).
+
+```js
+var Hacker = new Liftoff({
+  name: 'hacker',
+  v8flags: ['--harmony']
+});
+Hacker.on('respawn', function (flags, child) {
+  console.log('Detected node flags:', flags);
+  console.log('Respawned to PID:', child.pid);
+});
+```
+
+Event will be triggered for this command:
+`hacker --harmony commmand`
+
+## Examples
+
+Check out how [gulp](https://github.com/gulpjs/gulp-cli/blob/master/index.js) uses Liftoff.
+
+For a bare-bones example, try [the hacker project](https://github.com/js-cli/js-hacker/blob/master/bin/hacker.js).
+
+To try the example, do the following:
+
+1. Install the sample project `hacker` with `npm install -g hacker`.
+2. Make a `Hackerfile.js` with some arbitrary javascript it.
+3. Install hacker next to it with `npm install hacker`.
+3. Run `hacker` while in the same parent folder.
diff --git a/node_modules/liftoff/index.js b/node_modules/liftoff/index.js
new file mode 100644
index 0000000..7415dcf
--- /dev/null
+++ b/node_modules/liftoff/index.js
@@ -0,0 +1,211 @@
+const fs = require('fs');
+const util = require('util');
+const path = require('path');
+const EE = require('events').EventEmitter;
+
+const extend = require('extend');
+const resolve = require('resolve');
+const flaggedRespawn = require('flagged-respawn');
+const isPlainObject = require('is-plain-object');
+const mapValues = require('object.map');
+const fined = require('fined');
+
+const findCwd = require('./lib/find_cwd');
+const findConfig = require('./lib/find_config');
+const fileSearch = require('./lib/file_search');
+const parseOptions = require('./lib/parse_options');
+const silentRequire = require('./lib/silent_require');
+const buildConfigName = require('./lib/build_config_name');
+const registerLoader = require('./lib/register_loader');
+const getNodeFlags = require('./lib/get_node_flags');
+
+
+function Liftoff (opts) {
+  EE.call(this);
+  extend(this, parseOptions(opts));
+}
+util.inherits(Liftoff, EE);
+
+Liftoff.prototype.requireLocal = function (module, basedir) {
+  try {
+    var result = require(resolve.sync(module, {basedir: basedir}));
+    this.emit('require', module, result);
+    return result;
+  } catch (e) {
+    this.emit('requireFail', module, e);
+  }
+};
+
+Liftoff.prototype.buildEnvironment = function (opts) {
+  opts = opts || {};
+
+  // get modules we want to preload
+  var preload = opts.require || [];
+
+  // ensure items to preload is an array
+  if (!Array.isArray(preload)) {
+    preload = [preload];
+  }
+
+  // make a copy of search paths that can be mutated for this run
+  var searchPaths = this.searchPaths.slice();
+
+  // calculate current cwd
+  var cwd = findCwd(opts);
+
+  // if cwd was provided explicitly, only use it for searching config
+  if (opts.cwd) {
+    searchPaths = [cwd];
+  } else {
+    // otherwise just search in cwd first
+    searchPaths.unshift(cwd);
+  }
+
+  // calculate the regex to use for finding the config file
+  var configNameSearch = buildConfigName({
+    configName: this.configName,
+    extensions: Object.keys(this.extensions)
+  });
+
+  // calculate configPath
+  var configPath = findConfig({
+    configNameSearch: configNameSearch,
+    searchPaths: searchPaths,
+    configPath: opts.configPath
+  });
+
+  // if we have a config path, save the directory it resides in.
+  var configBase;
+  if (configPath) {
+    configBase = path.dirname(configPath);
+    // if cwd wasn't provided explicitly, it should match configBase
+    if (!opts.cwd) {
+      cwd = configBase;
+    }
+    // resolve symlink if needed
+    if (fs.lstatSync(configPath).isSymbolicLink()) {
+      configPath = fs.realpathSync(configPath);
+    }
+  }
+
+  // TODO: break this out into lib/
+  // locate local module and package next to config or explicitly provided cwd
+  var modulePath, modulePackage;
+  try {
+    var delim = path.delimiter,
+        paths = (process.env.NODE_PATH ? process.env.NODE_PATH.split(delim) : []);
+    modulePath = resolve.sync(this.moduleName, {basedir: configBase || cwd, paths: paths});
+    modulePackage = silentRequire(fileSearch('package.json', [modulePath]));
+  } catch (e) {}
+
+  // if we have a configuration but we failed to find a local module, maybe
+  // we are developing against ourselves?
+  if (!modulePath && configPath) {
+    // check the package.json sibling to our config to see if its `name`
+    // matches the module we're looking for
+    var modulePackagePath = fileSearch('package.json', [configBase]);
+    modulePackage = silentRequire(modulePackagePath);
+    if (modulePackage && modulePackage.name === this.moduleName) {
+      // if it does, our module path is `main` inside package.json
+      modulePath = path.join(path.dirname(modulePackagePath), modulePackage.main || 'index.js');
+      cwd = configBase;
+    } else {
+      // clear if we just required a package for some other project
+      modulePackage = {};
+    }
+  }
+
+  // load any modules which were requested to be required
+  if (preload.length) {
+    // unique results first
+    preload.filter(function (value, index, self) {
+      return self.indexOf(value) === index;
+    }).forEach(function (dep) {
+      this.requireLocal(dep, findCwd(opts));
+    }, this);
+  }
+
+  var exts = this.extensions;
+  var eventEmitter = this;
+  registerLoader(eventEmitter, exts, configPath, cwd);
+
+  var configFiles = {};
+  if (isPlainObject(this.configFiles)) {
+    var notfound = { path: null };
+    configFiles = mapValues(this.configFiles, function(prop, name) {
+      var defaultObj = { name: name, cwd: cwd, extensions: exts };
+      return mapValues(prop, function(pathObj) {
+        var found = fined(pathObj, defaultObj) || notfound;
+        if (isPlainObject(found.extension)) {
+          registerLoader(eventEmitter, found.extension, found.path, cwd);
+        }
+        return found.path;
+      });
+    });
+  }
+
+  return {
+    cwd: cwd,
+    require: preload,
+    configNameSearch: configNameSearch,
+    configPath: configPath,
+    configBase: configBase,
+    modulePath: modulePath,
+    modulePackage: modulePackage || {},
+    configFiles: configFiles
+  };
+};
+
+Liftoff.prototype.handleFlags = function (cb) {
+  if (typeof this.v8flags === 'function') {
+    this.v8flags(function (err, flags) {
+      if (err) {
+        cb(err);
+      } else {
+        cb(null, flags);
+      }
+    });
+  } else {
+    process.nextTick(function () {
+      cb(null, this.v8flags);
+    }.bind(this));
+  }
+};
+
+Liftoff.prototype.launch = function (opts, fn) {
+  if (typeof fn !== 'function') {
+    throw new Error('You must provide a callback function.');
+  }
+  process.title = this.processTitle;
+
+  var completion = opts.completion;
+  if (completion && this.completions) {
+    return this.completions(completion);
+  }
+
+  this.handleFlags(function (err, flags) {
+    if (err) {
+      throw err;
+    }
+    flags = flags || [];
+
+    var env = this.buildEnvironment(opts);
+
+    var forcedFlags = getNodeFlags.arrayOrFunction(opts.forcedFlags, env);
+    flaggedRespawn(flags, process.argv, forcedFlags, execute.bind(this));
+
+    function execute(ready, child, argv) {
+      if (child !== process) {
+        var execArgv = getNodeFlags.fromReorderedArgv(argv);
+        this.emit('respawn', execArgv, child);
+      }
+      if (ready) {
+        fn.call(this, env, argv);
+      }
+    }
+  }.bind(this));
+};
+
+
+
+module.exports = Liftoff;
diff --git a/node_modules/liftoff/lib/build_config_name.js b/node_modules/liftoff/lib/build_config_name.js
new file mode 100644
index 0000000..b83e185
--- /dev/null
+++ b/node_modules/liftoff/lib/build_config_name.js
@@ -0,0 +1,17 @@
+module.exports = function (opts) {
+  opts = opts || {};
+  var configName = opts.configName;
+  var extensions = opts.extensions;
+  if (!configName) {
+    throw new Error('Please specify a configName.');
+  }
+  if (configName instanceof RegExp) {
+    return [configName];
+  }
+  if (!Array.isArray(extensions)) {
+    throw new Error('Please provide an array of valid extensions.');
+  }
+  return extensions.map(function (ext) {
+    return configName + ext;
+  });
+};
diff --git a/node_modules/liftoff/lib/file_search.js b/node_modules/liftoff/lib/file_search.js
new file mode 100644
index 0000000..76dadd6
--- /dev/null
+++ b/node_modules/liftoff/lib/file_search.js
@@ -0,0 +1,14 @@
+const findup = require('findup-sync');
+
+module.exports = function (search, paths) {
+  var path;
+  var len = paths.length;
+  for (var i = 0; i < len; i++) {
+    if (path) {
+      break;
+    } else {
+      path = findup(search, {cwd: paths[i], nocase: true});
+    }
+  }
+  return path;
+};
diff --git a/node_modules/liftoff/lib/find_config.js b/node_modules/liftoff/lib/find_config.js
new file mode 100644
index 0000000..71c3f07
--- /dev/null
+++ b/node_modules/liftoff/lib/find_config.js
@@ -0,0 +1,25 @@
+const fs = require('fs');
+const path = require('path');
+const fileSearch = require('./file_search');
+
+module.exports = function (opts) {
+  opts = opts || {};
+  var configNameSearch = opts.configNameSearch;
+  var configPath = opts.configPath;
+  var searchPaths = opts.searchPaths;
+  // only search for a config if a path to one wasn't explicitly provided
+  if (!configPath) {
+    if (!Array.isArray(searchPaths)) {
+      throw new Error('Please provide an array of paths to search for config in.');
+    }
+    if (!configNameSearch) {
+      throw new Error('Please provide a configNameSearch.');
+    }
+    configPath = fileSearch(configNameSearch, searchPaths);
+  }
+  // confirm the configPath exists and return an absolute path to it
+  if (fs.existsSync(configPath)) {
+    return path.resolve(configPath);
+  }
+  return null;
+};
diff --git a/node_modules/liftoff/lib/find_cwd.js b/node_modules/liftoff/lib/find_cwd.js
new file mode 100644
index 0000000..2a029b9
--- /dev/null
+++ b/node_modules/liftoff/lib/find_cwd.js
@@ -0,0 +1,18 @@
+const path = require('path');
+
+module.exports = function (opts) {
+  if (!opts) {
+    opts = {};
+  }
+  var cwd = opts.cwd;
+  var configPath = opts.configPath;
+  // if a path to the desired config was specified
+  // but no cwd was provided, use configPath dir
+  if (typeof configPath === 'string' && !cwd) {
+    cwd = path.dirname(path.resolve(configPath));
+  }
+  if (typeof cwd === 'string') {
+    return path.resolve(cwd);
+  }
+  return process.cwd();
+};
diff --git a/node_modules/liftoff/lib/get_node_flags.js b/node_modules/liftoff/lib/get_node_flags.js
new file mode 100644
index 0000000..c58165e
--- /dev/null
+++ b/node_modules/liftoff/lib/get_node_flags.js
@@ -0,0 +1,30 @@
+function arrayOrFunction(arrayOrFunc, env) {
+  if (typeof arrayOrFunc === 'function') {
+    return arrayOrFunc.call(this, env);
+  }
+  if (Array.isArray(arrayOrFunc)) {
+    return arrayOrFunc;
+  }
+  if (typeof arrayOrFunc === 'string') {
+    return [arrayOrFunc];
+  }
+  return [];
+}
+
+function fromReorderedArgv(reorderedArgv) {
+  var nodeFlags = [];
+  for (var i = 1, n = reorderedArgv.length; i < n; i++) {
+    var arg = reorderedArgv[i];
+    if (!/^-/.test(arg) || arg === '--') {
+      break;
+    }
+    nodeFlags.push(arg);
+  }
+  return nodeFlags;
+}
+
+module.exports = {
+  arrayOrFunction: arrayOrFunction,
+  fromReorderedArgv: fromReorderedArgv,
+};
+
diff --git a/node_modules/liftoff/lib/parse_options.js b/node_modules/liftoff/lib/parse_options.js
new file mode 100644
index 0000000..ab416b5
--- /dev/null
+++ b/node_modules/liftoff/lib/parse_options.js
@@ -0,0 +1,35 @@
+const extend = require('extend');
+
+module.exports = function (opts) {
+  var defaults = {
+    extensions: {
+      '.js': null,
+      '.json': null
+    },
+    searchPaths: []
+  };
+  if (!opts) {
+    opts = {};
+  }
+  if (opts.name) {
+    if (!opts.processTitle) {
+      opts.processTitle = opts.name;
+    }
+    if (!opts.configName) {
+      opts.configName = opts.name + 'file';
+    }
+    if (!opts.moduleName) {
+      opts.moduleName = opts.name;
+    }
+  }
+  if (!opts.processTitle) {
+    throw new Error('You must specify a processTitle.');
+  }
+  if (!opts.configName) {
+    throw new Error('You must specify a configName.');
+  }
+  if (!opts.moduleName) {
+    throw new Error('You must specify a moduleName.');
+  }
+  return extend(defaults, opts);
+};
diff --git a/node_modules/liftoff/lib/register_loader.js b/node_modules/liftoff/lib/register_loader.js
new file mode 100644
index 0000000..e29b08a
--- /dev/null
+++ b/node_modules/liftoff/lib/register_loader.js
@@ -0,0 +1,24 @@
+const rechoir = require('rechoir');
+
+module.exports = function(eventEmitter, extensions, configPath, cwd) {
+  extensions = extensions || {};
+
+  if (typeof configPath !== 'string') {
+    return;
+  }
+
+  var autoloads = rechoir.prepare(extensions, configPath, cwd, true);
+  if (autoloads instanceof Error) {
+    autoloads = autoloads.failures;
+  }
+
+  if (Array.isArray(autoloads)) {
+    autoloads.forEach(function (attempt) {
+      if (attempt.error) {
+        eventEmitter.emit('requireFail', attempt.moduleName, attempt.error);
+      } else {
+        eventEmitter.emit('require', attempt.moduleName, attempt.module);
+      }
+    });
+  }
+};
diff --git a/node_modules/liftoff/lib/silent_require.js b/node_modules/liftoff/lib/silent_require.js
new file mode 100644
index 0000000..7b4dfe4
--- /dev/null
+++ b/node_modules/liftoff/lib/silent_require.js
@@ -0,0 +1,5 @@
+module.exports = function (path) {
+  try {
+    return require(path);
+  } catch (e) {}
+};
diff --git a/node_modules/liftoff/node_modules/findup-sync/README.md b/node_modules/liftoff/node_modules/findup-sync/README.md
new file mode 100644
index 0000000..58ce20e
--- /dev/null
+++ b/node_modules/liftoff/node_modules/findup-sync/README.md
@@ -0,0 +1,69 @@
+# findup-sync  [![Build Status](https://travis-ci.org/js-cli/node-findup-sync.svg)](https://travis-ci.org/js-cli/node-findup-sync)  [![NPM version](https://badge.fury.io/js/findup-sync.svg)](http://badge.fury.io/js/findup-sync)
+
+> Find the first file matching a given pattern in the current directory or the nearest ancestor directory.
+
+Matching is done with [micromatch][], please report any matching related issues on that repository. 
+
+## Install with [npm](npmjs.org)
+
+```bash
+npm i findup-sync --save
+```
+
+## Usage
+
+```js
+var findup = require('findup-sync');
+findup(patternOrPatterns [, micromatchOptions]);
+
+// Start looking in the CWD.
+var filepath1 = findup('{a,b}*.txt');
+
+// Start looking somewhere else, and ignore case (probably a good idea).
+var filepath2 = findup('{a,b}*.txt', {cwd: '/some/path', nocase: true});
+```
+
+* `patterns` **{String|Array}**: Glob pattern(s) or file path(s) to match against.    
+* `options` **{Object}**: Options to pass to [micromatch]. Note that if you want to start in a different directory than the current working directory, specify a `cwd` property here.    
+* `returns` **{String}**: Returns the first matching file.
+
+## Running tests
+
+Install dev dependencies:
+
+```bash
+npm i -d && npm test
+```
+
+## Contributing
+
+In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [Grunt](http://gruntjs.com/)
+
+For bugs and feature requests, [please create an issue](https://github.com/cowboy/node-findup-sync/issues).
+
+## Release History
+
+2017-08-07 - v2.0.0 - Drop node 0.8 support, Bump all dependencies (including some Majors)  
+2017-04-18 - v1.0.0 - Major bump from stable 0.4.3  
+2015-01-30 - v0.4.0 - Refactored, not also uses [micromatch][] instead of minimatch.  
+2015-09-14 - v0.3.0 - updated glob to ~5.0.  
+2014-12-17 - v0.2.1 - Updated to glob 4.3.  
+2014-12-16 - v0.2.0 - Removed lodash, updated to glob 4.x.  
+2014-03-14 - v0.1.3 - Updated dependencies.  
+2013-03-08 - v0.1.2 - Updated dependencies. Fixed a Node 0.9.x bug. Updated unit tests to work cross-platform.  
+2012-11-15 - v0.1.1 - Now works without an options object.  
+2012-11-01 - v0.1.0 - Initial release.  
+
+## Authors
+
+**"Cowboy" Ben Alman**
+ 
++ [github/cowboy](https://github.com/cowboy)
++ [twitter/cowboy](http://twitter.com/cowboy) 
+
+## License
+
+Copyright (c) 2012-2016 "Cowboy" Ben Alman  
+Released under the MIT license
+
+[micromatch]: http://github.com/jonschlinkert/micromatch
diff --git a/node_modules/liftoff/node_modules/findup-sync/index.js b/node_modules/liftoff/node_modules/findup-sync/index.js
new file mode 100644
index 0000000..b843495
--- /dev/null
+++ b/node_modules/liftoff/node_modules/findup-sync/index.js
@@ -0,0 +1,85 @@
+'use strict';
+
+/**
+ * Module dependencies
+ */
+
+var fs = require('fs');
+var path = require('path');
+var isGlob = require('is-glob');
+var resolveDir = require('resolve-dir');
+var detect = require('detect-file');
+var mm = require('micromatch');
+
+/**
+ * @param  {String|Array} `pattern` Glob pattern or file path(s) to match against.
+ * @param  {Object} `options` Options to pass to [micromatch]. Note that if you want to start in a different directory than the current working directory, specify the `options.cwd` property here.
+ * @return {String} Returns the first matching file.
+ * @api public
+ */
+
+module.exports = function(patterns, options) {
+  options = options || {};
+  var cwd = path.resolve(resolveDir(options.cwd || ''));
+
+  if (typeof patterns === 'string') {
+    return lookup(cwd, [patterns], options);
+  }
+
+  if (!Array.isArray(patterns)) {
+    throw new TypeError('findup-sync expects a string or array as the first argument.');
+  }
+
+  return lookup(cwd, patterns, options);
+};
+
+function lookup(cwd, patterns, options) {
+  var len = patterns.length;
+  var idx = -1;
+  var res;
+
+  while (++idx < len) {
+    if (isGlob(patterns[idx])) {
+      res = matchFile(cwd, patterns[idx], options);
+    } else {
+      res = findFile(cwd, patterns[idx], options);
+    }
+    if (res) {
+      return res;
+    }
+  }
+
+  var dir = path.dirname(cwd);
+  if (dir === cwd) {
+    return null;
+  }
+  return lookup(dir, patterns, options);
+}
+
+function matchFile(cwd, pattern, opts) {
+  var isMatch = mm.matcher(pattern, opts);
+  var files = tryReaddirSync(cwd);
+  var len = files.length;
+  var idx = -1;
+
+  while (++idx < len) {
+    var name = files[idx];
+    var fp = path.join(cwd, name);
+    if (isMatch(name) || isMatch(fp)) {
+      return fp;
+    }
+  }
+  return null;
+}
+
+function findFile(cwd, filename, options) {
+  var fp = cwd ? path.resolve(cwd, filename) : filename;
+  return detect(fp, options);
+}
+
+function tryReaddirSync(fp) {
+  try {
+    return fs.readdirSync(fp);
+  } catch(err) {}
+  return [];
+}
diff --git a/node_modules/liftoff/node_modules/findup-sync/package.json b/node_modules/liftoff/node_modules/findup-sync/package.json
new file mode 100644
index 0000000..c067d64
--- /dev/null
+++ b/node_modules/liftoff/node_modules/findup-sync/package.json
@@ -0,0 +1,79 @@
+{
+  "_from": "findup-sync@^2.0.0",
+  "_id": "findup-sync@2.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
+  "_location": "/liftoff/findup-sync",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "findup-sync@^2.0.0",
+    "name": "findup-sync",
+    "escapedName": "findup-sync",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/liftoff"
+  ],
+  "_resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
+  "_shasum": "9326b1488c22d1a6088650a86901b2d9a90a2cbc",
+  "_spec": "findup-sync@^2.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\liftoff",
+  "author": {
+    "name": "\"Cowboy\" Ben Alman",
+    "url": "http://benalman.com"
+  },
+  "bugs": {
+    "url": "https://github.com/js-cli/node-findup-sync/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "detect-file": "^1.0.0",
+    "is-glob": "^3.1.0",
+    "micromatch": "^3.0.4",
+    "resolve-dir": "^1.0.1"
+  },
+  "deprecated": false,
+  "description": "Find the first file matching a given pattern in the current directory or the nearest ancestor directory.",
+  "devDependencies": {
+    "homedir-polyfill": "^1.0.1",
+    "is-absolute": "^1.0.0",
+    "jshint": "^2.9.5",
+    "mocha": "^3.5.0",
+    "normalize-path": "^2.1.1",
+    "resolve": "^1.4.0"
+  },
+  "engines": {
+    "node": ">= 0.10"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/js-cli/node-findup-sync#readme",
+  "keywords": [
+    "file",
+    "find",
+    "find-up",
+    "findup",
+    "glob",
+    "match",
+    "pattern",
+    "resolve",
+    "search"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "findup-sync",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/js-cli/node-findup-sync.git"
+  },
+  "scripts": {
+    "lint": "jshint index.js test/support/index.js test/test.js",
+    "test": "npm run lint && mocha"
+  },
+  "version": "2.0.0"
+}
diff --git a/node_modules/liftoff/package.json b/node_modules/liftoff/package.json
new file mode 100644
index 0000000..ef29a04
--- /dev/null
+++ b/node_modules/liftoff/package.json
@@ -0,0 +1,84 @@
+{
+  "_from": "liftoff@~2.5.0",
+  "_id": "liftoff@2.5.0",
+  "_inBundle": false,
+  "_integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
+  "_location": "/liftoff",
+  "_phantomChildren": {
+    "detect-file": "1.0.0",
+    "is-glob": "3.1.0",
+    "micromatch": "3.1.10",
+    "resolve-dir": "1.0.1"
+  },
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "liftoff@~2.5.0",
+    "name": "liftoff",
+    "escapedName": "liftoff",
+    "rawSpec": "~2.5.0",
+    "saveSpec": null,
+    "fetchSpec": "~2.5.0"
+  },
+  "_requiredBy": [
+    "/grunt/grunt-cli"
+  ],
+  "_resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz",
+  "_shasum": "2009291bb31cea861bbf10a7c15a28caf75c31ec",
+  "_spec": "liftoff@~2.5.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\grunt\\node_modules\\grunt-cli",
+  "author": {
+    "name": "Tyler Kellen",
+    "url": "http://goingslowly.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/js-cli/js-liftoff/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [],
+  "dependencies": {
+    "extend": "^3.0.0",
+    "findup-sync": "^2.0.0",
+    "fined": "^1.0.1",
+    "flagged-respawn": "^1.0.0",
+    "is-plain-object": "^2.0.4",
+    "object.map": "^1.0.0",
+    "rechoir": "^0.6.2",
+    "resolve": "^1.1.7"
+  },
+  "deprecated": false,
+  "description": "Launch your command line tool with ease.",
+  "devDependencies": {
+    "chai": "^3.5.0",
+    "coffeescript": "^1.10.0",
+    "jscs": "^3.0.7",
+    "jshint": "^2.9.2",
+    "mocha": "^3.5.3",
+    "nyc": "^11.2.1",
+    "sinon": "~1.17.4"
+  },
+  "engines": {
+    "node": ">= 0.8"
+  },
+  "files": [
+    "index.js",
+    "lib",
+    "LICENSE"
+  ],
+  "homepage": "https://github.com/js-cli/js-liftoff#readme",
+  "keywords": [
+    "command line"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "liftoff",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/js-cli/js-liftoff.git"
+  },
+  "scripts": {
+    "cover": "nyc --reporter=lcov --reporter=text-summary npm test",
+    "test": "jshint lib index.js && jscs lib index.js && mocha -t 5000 -b -R spec test/index"
+  },
+  "version": "2.5.0"
+}
