Use injected build config to consolidate build-js and build-js-dev

This PR does 3 things:

* **Inject a configuration object into all Gulp tasks** This allows you to define project variables like Oauth secrets, DB Keys, GoogleAnalytics ids etc. in your project config and have that available to all tasks. Using a config object also allows you to set defaults that can be overridden as needed.
* **Use a project.env variable + CLI flag to clean up build-js** - I noticed that the ONLY difference between `build-js` and `build-js-dev` is the webpack config. To DRY things up I consolidated the two and used an env variable in the `project.config.js` file. I also added minimist so that certain config can be overridden with [simple CLI flags](https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md). Aside from webpack configuration there may be a number of credentials and keys across many parts of the build (API sandbox endpoint vs. production for example) that will need to be toggled based on env as a project grows and I think that this is a pretty clean way to do it.
* **Convert all the gulp tasks into modules again** - Since they need to take an argument I had to change them all back :) No tasks besides `build-js` were actually modified other than wrapping in a function but you can that whitespace flag again to see for yourself.
Rather than doing option validation in the main gulpfile it might be better to pass that into config or have some kind of utility that can do this. Doing it like this is a pain for two reasons:

1. You can't just extend one object with the other since a user might clobber a protected config
2. Without validation a user can fat finger any of the flags. `gulp build --env producion` for example would break things. You can check for bad config in each task but that isn't DRY at all.