Port Atom's Build System

This PR ports the build system from Atom, but making it more generic (and removing most of the hard-coded uses of the name 'atom'). All of the parameters given in the build are now built around fields in the package.json, the most important ones being `name` (a name for your app's build stuff), and `productName` (your executable name i.e. Atom.app).

Note that this PR doesn't change the name of "Atom Helper" because it is currently hard-coded into Atom Shell (this can most likely be fixed too however). This PR creates the dumbest Atom Shell app possible - in future PRs we'll build a bit more of a framework around windows:

![](http://cl.ly/image/2N3D1F2E060A/content#png)

This PR also most likely does not have a functional Linux build around building RPMs / DEBs, will fix in a later PR.

## TODO:

- [x] Verify build on OS X
- [x] Verify build on Windows
- [x] Verify build on Linux
- [ ] Fix `set-version-task` on Windows
@paulcbetts the module cache precomputes required paths and generates a map of all the dependencies to enable module reuse.

This is only applicable for something like Atom where it is loading an unknown amount of files at startup from various directories and so `npm dedupe` can't help you out.

It shouldn't be needed for the typical Atom Shell app.