Grunticon refactor + improvements

I’ve been working on a few improvements for grunticon for a while now, and I’m not sure what the best way is to reintroduce them, so I figure a mega pull request will “ “open a dialog” ” as they say.

I initially wanted a more configurable file snippet and then things got out of hand and I ended up refactoring grunticon entirely. I’m using my fork in production on a few client sites and it’s working marvellously, so I figure it’s time to get some new eyes on this thing.

## Stuff I’ve changed or removed (caution: opinions)

1. `svgo` is no longer built in. `grunt-svgmin` does the trick just fine. One less thing to maintain.
2. On a similar note, SVG colour manipulation has been moved to a separate grunt plugin (that I haven’t had the time to work on). My thoughts:
  - Colour manipulation is several steps removed from what the core of grunticon is.
  - SVG modification based on filename is not the most intuitive thing ever. If you want to modify a dozen files the same way, they all need to have the same funky suffix. A problem better solved by a specific plugin.

  The way I see it, SVG manipulation should occur long before grunticon is involved. Keeping SVG manipulation as an independently-developed plugin means that (hopefully) the plugin will become more robust more quickly. That’s my goal, anyway.
3. `phantomjs` and `pngcrush` are no longer dependencies. They can still be used without issue, but the user can alternately specify a path to the specific binaries:
![grunticon3](https://f.cloud.github.com/assets/13781/1417629/e69e7786-3f94-11e3-8238-eb926554d1b5.png)
![grunticon4](https://f.cloud.github.com/assets/13781/1417635/38c6b17c-3f95-11e3-9d9f-d0b63a263e02.png)
4. `grunticoner.js` and its ilk are no longer a thing. There was a whole heck of a lot of bouncing around going on, and some seriously deep indentation. I tried to keep things pretty linear in the [main `grunticon.js` file](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/tasks/grunticon.js#L530-L536). Hopefully it’ll make future maintenance easier.
5. Custom selectors have been [moved into template files](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/example/templates/icons.css#L21-L32). This allows for greater flexibility, and it removes a hyper-specific seldom-used config option. Bonus!
6. The CSS prefix (`cssBasePath`) that gets appended to CSS URLs in the grunticon snippet can be any string. I include the snippet file directly in several of my Django projects, and as such, I needed to use the `{{ STATIC_URL }}` template variable.

[Going through the updated Gruntfile](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/Gruntfile.js#L17-L68) is probably the best way to get an idea of what’s changed.

## Stuff I’ve added

1. [grunt file array support](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/tasks/grunticon.js#L158). File arrays are [a standard grunt thing](http://gruntjs.com/configuring-tasks#files-array-format), so it’s one less thing to maintain.
2. Template-based file snippet, preview HTML file, loader JS, and CSS. My favourite feature. This should take care of #45, #72, #83, #84, #87, #92, #93, #94 and all the other nit-pickier issues around how exactly grunticon files are generated. Metadata for each image is [available in the templates](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/tasks/grunticon.js#L436-L504).
3. Standardised methods for more things. Examples: File arrays (as I’ve already mentioned), [required config options](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/tasks/grunticon.js#L36), [default config options](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/tasks/grunticon.js#L41-L58), [path joining](https://github.com/meyer/grunticon/blob/fdde8261958711dbacbab36a199328a66fb6addc/tasks/grunticon.js#L54-L57)… that sort of stuff.
4. Output looks a bit prettier: ![grunticon1](https://f.cloud.github.com/assets/13781/1417553/2533610e-3f91-11e3-92e4-c159e13824d6.png)
5. Verbose mode for grunticon and phantomjs. This should help with debugging those mysteriously silent phantomjs issues. ![grunticon2](https://f.cloud.github.com/assets/13781/1417569/ecc793c0-3f91-11e3-92f7-835de6fd9fb9.png)

## Stuff I still want to do

1. Write some tests. Gosh. I’ve never written a test before, but it doesn’t seem like rocket science. Haven’t had the time to investigate.
2. Does this fork work on Windows? I don’t know. It should be *more* Windows-friendly than master, as I’ve stripped out the OS-specific path separator stuff. But hey, I don’t know.
3. Use the `dest` property of the grunt file object instead of using `dest` in options.