Make build-by-initializer a pattern and use it

Now attributes can be given the Bolts::Initializer trait, which generates a
second, hidden attribute that takes the actual value during initialization and
causes the original attriute to lazy load from a special init_locator associated
with the parent object via Bolts::Role::Initializer.

This allows the object to be slightly less independent in cases where it's
convenient for the object to self-initialize some of it's state from a locator.
Bolts::Artifact is such a case. This is done in such a way, now, that the object
can still be completely initialized externally as before without requiring the
locator be passed (only required if you want to use the initializer bit).