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"