Either injections

This changeset changes the return type of `Injection#inject` from `Option[T]` to `Either[Throwable, T]`. 

Don't merge this guy yet. Tests needed updated and a few issues need to be addressed. Think of this as a pre-pull request to get the discussion going in a more convenient place.