Add Lenses - Getter and Setter for immutable data structures

A Lens is the purely functional alternative for getters and setters.
The implementation is bases one the one provided by scalaz, which
is based on Kmett's Haskell Lenses.