Refactor injectors and injector blueprints to allow setter injection to work

There were a few design flaws highlighted when I went to make setter injection
usable as I wrote the POD for it. Namely, the way injection was working implied
that the value from the blueprint always existed, which is a poor assumption. It
is one that is usually true, but one that is false in important cases, such as
when you choose not to pass a value to the call to acquire() because you don't
want to set that value during resolution. This has to do with maintaining the
distinction Perl hashes make between exists and defined, which Moose attributes
preserve as well.

Anyway, the change is as follows:

1. Bolts::Blueprint::Role::Injector now requires blueprints to provide an
   ->exists() method which returns true if a value (possibly undef) exists for
   the blueprint. For most blueprints, this is always true. For given
   blueprints, it is not always true.

2. The Bolts::Injector interface has changed so that implementations implement
   ->pre_inject_value() or ->post_inject_value() instead of pre_inject and
   post_inject. These are streamlined a bit and you don't have to implement the
   other with an empty sub anymore. (In fact, you shouldn't since the absence of
   that function causes that injection phase to be ignored.)

3. Modified the blueprints and injectors to match the interface.

4. Corrected the tests to make sure they now anticipate the correct behavior and
   added a test for setter injection.