Support for Witness in Lens

This PR makes it possible to use field names in Lens:

```scala
case class Address(street : String, city : String, postcode : String)
case class Person(name : String, age : Int, address : Address)

val address = Address("Southover Street", "Brighton", "BN2 9UA")
val person = Person("Joe Grey", 37, address)

val streetLens   = Lens[Person] >> 'address >> 'street

streetLens.get(person) //  res0: String = Southover Street
streetLens.set(person)("Ewart St") // res1: Person = Person(Joe Grey,37,Address(Ewart St,Brighton,BN2 9UA))
```