Adds Functor/Applicative instances for Min/Max/First/Last

Useful when defining nested structures containing one of these
types, as it allow us to derive functor and applicative (manually).