Cleans up execute_job

A while back I submitted [a PR](https://github.com/mperham/sidekiq/pull/1938) that exposed a way to customize how a job was executed, in so much as how perform was actually called on the worker. I duplicated that in the sidekiq/testing, and have since determined that was a mistake and am rectifying that here.

In doing what I talk about in that original PR, I realized there was still some finagling to get it to behave correctly for the specs, and then I realized that it wasn't very unified and didn't push through to the actual functionality that I wanted to make sure was working -- after some back and forth (captured on https://github.com/mperham/sidekiq/pull/2097) @mperham decided he'd rather remove it.

Also cleans up the drain method in the test harness.
heh, nice. Anyway, here's a gist of using this public "API", fwiw. Maybe it'll make more sense when you see the test pass, but in a real world scenario nothing will actually execute.

https://gist.github.com/jejacks0n/44d65f18876ba84f7c67