Refactor leaky abstractions

Prior to this change, it was common for a domain layer that was wrapping
Image objects returned by methods to neglect to unwrap the objects on
the way in to other methods.

This change fixes that by making proxy base classes less leaky and
inheriting from them in the various domain layers.

Change-Id: I22866cdd800c4c95b43c92762ead3775cffeaa80