Add `apply` function to Refinement<T, P>
Add an apply function that applies a function f to the underlying value of the Refinement type and then tries to refine the resulting value as well.
Basically, this implements what was suggested here: https://github.com/2bdkid/refinement/issues/6#issuecomment-1250140335...
I'm not entirely convinced about the naming of the function, though...
I thought calling it map as in the case of Option<T>::map but in that case, the function goes from Option<T> to Option<U> with f being T -> U.
This one goes from Refinement<T, P> to Option<Refinement<T, P>> with f being T -> T, so I thought that apply fits better...
Please, feel free to drop the pull request if you don't believe it's important or worth of your time (or if it needs to be improved a lot). Thanks.