Generalized lenses and changed isos to pairs of lenses

This also drops the dependency on `profunctors`
Reverted back to using `Lens'`
Changed `drop` and `dropWhile` to getters

Their previous `Pipe` form encouraged code with quadratic time complexity
when used in roughly this pattern:

    example p = do
        p' <- drop n p
	example p'

The reason why is that each recursion adds an additional `(>-> cat)` stage
downstream of the leftovers, which makes it more and more expensive to
read from the leftovers.
Version 2.0.1 => 2.1.0
Remove reference to `Profunctor` in re-exports
Merge remote-tracking branch 'Gabriel439/Haskell-Pipes-ByteString-Library'

Conflicts:
	pipes-bytestring.cabal