Arrows are strong profunctors

This changes Arrows from extending Profunctor to extending a new
type-class called `Strong` which extracts out the `first` and `second`
methods.

A dual `Costrong` type-class is included which has `cofirst` and
`cosecond`.

Instances are provided for Kleisli and Cokeisli.