Add apply extension function that accepts a parameter

Tap, looks great (although I hate the name), but I think the parameterized apply makes sens too.

I also think adding a parameter for the run functions also makes sense, but perhaps it might be better for readability to name the parameterized versions applyWith and runWith.