More granular configuration

I need to add some tests for this which I'll work on later this evening but what do you think of this? You can try it out by using the more-granular-configuration branch of my fork of browserify-rails-sample:

https://github.com/cymen/browserify-rails-sample/tree/more-granular-configuration

If you access /beep, the page loads robot.js and beep.js (you can also access /boop). The two browserified-file contents are:

robot.js:
```
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"9WgEjc":[function(require,module,exports){
module.exports = function (s) { return s.toUpperCase() + '!' };

},{}],"./robot.js":[function(require,module,exports){
module.exports=require('9WgEjc');
},{}]},{},[])
// omitting rest of file (source map)
```

beep.js:
```
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
var $ = require('jquery-browserify'),
    robot = require('./robot.js'),
    says = 'beep';

console.log(robot(says));

$('document').ready(function() {
  $('#root').html(robot(says));
});

},{"./robot.js":"9WgEjc","jquery-browserify":2}],2:[function(require,module,exports){
// omitting rest of file (jquery-browserify and source map)
```

And the configuration is actually simpler than I thought:

```
robot:
  require:
    - ./robot.js
beep:
  external:
    - robot.js
boop:
  external:
    - robot.js
```

I need to try it with a slightly more complex example however it works great when moving from /beep to /boop (robot.js is same so cached, etc).

Fixes #16