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.
Rename Costrong to ProChoice

The original name was take from Choice's Haskell doc, which says:

> The generalization of DownStar of a "costrong" Functor

But it seems that is wrong:

> <edwardk> puffnfresh: my notion of costrength refined after i wrote that

Easy fix:

> <edwardk> ProfunctorChoice or ProChoice is fine

The syntax names have also changed, since they're not dual functions -
they just operate on coproducts rather than products. The new names are:

* `proleft`
* `proright`
Merge pull request #798 from puffnfresh/feature/strong-costrong

Arrows are strong profunctors