Output format plugin

This is early work. I just wanted you to have a peek to the direction this is turning into.
I think that since getUrl() is a helper function, it's "legit" to pass it the request. Re-Setting and reverting the request sounds a little harsh for what we want to accomplish here.