Make lenses with template Haskell

Fixes #50.