Added Lens abstraction.

The abstract base classes are gross. I should replace them with pluggable strategies.