Implements basic plugin behavior.

Basically all this does is intercept the existing
"extend" function that all lineman apps call from
 config/application.js and config/files.js

When a user extends application (or files), Lineman
will first look for anything in config/plugins (first
built-ins, then in the user's project) and override
the config.

If a user creates a file `config/plugins/uglify.js`
and they export an object with `{ config: "Foo" }`, 
then the application config will be extended with 
`{ uglify: "Foo" }`. 

A few notes:

* If a plugin is multi-word then it'll be camelized
(e.g. foo-bar.js will apply its `config` property 
extended as `fooBar` unless a `name` property is 
exported
* A plugin can export a `files` property and override
any file patterns that it likes.
* If a plugin exports a function, it'll be invoked
and passed the result of `require('lineman')`, which
isn't a remarkably useful object but can get you access
to the default configs, Lineman's depended-on grunt,
and whatever libs we expose (currently just fileUtils).
Extract all the task configs to plugins
Loosen the "config" property of plugins 

As much as I like the idea of coaxing people into
keeping plugins named 1-to-1 with the task they're
overriding, it just creates a pain in the ass for
the cases where a plugin really needs to make general
changes to the app config (for example, 
appending/prepending tasks to the task lists)
adds support for plugins in external repos
Merge pull request #169 from testdouble/plugins

Add config plugins