Refactor of evented runners (#17283)

This is a refactor of #17283 (tangentially related to #9444 since we had some discussion in there) to avoid most of the code duplication-- since we now have async client mixins.

I'm still not sure about the __progress__ global, since it is *very* specific, but I'm not sure having someone having to write out something like:
```
__jid_event__.fire_event({'data': 'Runner is {0}% done'.format(i), 'outputter': 'pprint'}, 'progress')
```
Is any better than just 

```
event.fire_event({'data': 'Runner is {0}% done'.format(i), 'outputter': 'pprint'}, 'progress', base=__tag__)
```

So in addition to the __progress__ global I've added __jid__, __user__, __tag__, and __jid_event__.

As part of that the "low" func now creates a JID and events for all calls to it (so we are consistent). All of these are specific to each execution. __jid_event__ is a new class called "NamespacedEvent" which is just a wrapper to allow for people to fire events from a different base tag, in this case within the runner you could fire an event with tag "foo" and it would end up as "salt/run/SOME_JID/foo" (alternatively you could just use base=__tag__ with the regular event class (which I'm leaning towards, since this seems a bit messy)

@cachedout @whiteinge 
Pinging the 2 of you about the __progress__ object vs the Namespaced event. I'm thinking we could maybe generalize the outputter class in the runner to work for wheel and runner, and come up with some way of printing out all events within the namespace-- so people don't have to follow the strict event format from RunnerEvent (which I've removed).