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.
Alternatively, we can leave it alone, and accept the fact that it's not good.

I've tried every approach that I can think of to try and resolve what I introduced. I feel responsible for that bad code, and now that understand the code better I want to rectify it. But if that's not desired, and I'm unable to do it in a way that you will accept, I'm pretty out of options and will defer to you.