#24 - fresh copies of the library, remove circular dependencies

Removes the circular dependency and `get_promise` hack, turning many of the modules in `/src` into:

```js
module.exports = function(/*...*/) {
  // module code
};
```

where they're injected properly with any necessary objects during the build using the `optionalModuleDependencyMap` in the gruntfile. 

Also, splits the `apiRejection` into its own file since it's the only module requiring the `Promise` object.