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.
My understanding is that you are trying to override `execute_job` in your own code and want Sidekiq's test infrastructure to execute your override.  Since Sidekiq's test infra supplies its own execute_job impl, this is not currently the case: you need to duplicate the override.

The Sidekiq test infrastructure makes no promises about this.  It tries to reproduce the job execution "pipeline" as close as possible but it will never reproduce it 100%.  I'm perfectly ok with the existing semantic: 99.9% of users will never override this method.  If you want to keep the method or deprecate it, I can be persuaded either way.  For simplicity's sake, I would probably fall on the side of deprecation and removal.  Since it is a public API, even if undocumented, I'd prefer to make its future clear if we need to deprecate now and remove in 4.x.