bclinkinbeard's options merging and beforeHook feature, minus a bug

Like the title says it's the same PR from @bclinkinbeard just that the options object merges with the target configuration so that you can override the general options with specific ones.

For example:

    browserify:
      options:
        debug: true
        beforeHook: (bundle) ->
          shim(bundle, {jquery: {path: "./components/jquery/jquery.js", exports: "$"}})
          .transform(coffeeify)
      app:
        src: ["app.coffee"]
        dest: "public/app.js"
      tests:
        debug: false
        src: ["test/specs/**/*"]
        dest: "test/specs.js"