Artifact extrator

Implemented artifact extractor... To see how it looks in real life, take a look at this test task:
http://docs.taskcluster.net/tools/task-inspector/#7b58dd7f-00e0-4e96-8b44-697a1fd25484

We require all artifacts to be declared in the task.json upfront, and we don't consider missing artifacts a failure of the task. The task will still _complete_, but consumers of the result may choose to consider it an _unsuccessful completion_.

Missing artifacts will be noted in the result structure.

**Note**, I think we need to rethink middleware and result structure at some point. I like how features can be enabled/disabled, and that they are very loosely connected. But right now the task specific `result` property of the result structure isn't very well defined. Anyways, this is fine for development.