feat: asynchronous injection

There are some corner cases that need to be figured out, but the basic stuff works.
feat: provide Injector
fix: testing helpers to work with the async
refactor: move some code to annotations and simplify
refactor: rename parsed annotations
refactor: annotations
refactor: reuse utils in testing
style: make jshint happy
test: use toBePromiseLike matcher
refactor: some more
refactor: create Provider class
refactor: add a todo for future generations
chore: move assert to pipe
Merge pull request #27 from RGBboy/node-traceur-runtime

fix: directly require traceur runtime;
refactor(Injector.get): instance setting needed to be dry

Some code was noted by a comment to be dry'd up. Refactored the code into
local function with all dependencies passed in as arguments.
Merge pull request #28 from kalisjoshua/master

Refactor - DRY `instance` setting
test: comment out the logging

I'm tired of seeing it all the time. We should use diary and disable it during tests... This is just temporary ;-)
chore: push 2.0.0-pre-3 to NPM
refactor: setInstance more "functional"
feat: use Traceur's promise instead of Q

Closes #23