Updated the install function to use the same install/downgrade/reinstall logic for sources as it was already using for pkgs.
fixed pylint violations
Execute runner functions asynchronously via the Reactor

Closes #13277
Updated to managing schedule code.  Adding ability to enable, disable scheduler completely on a minion.  Also the ability to enable and disable particular jobs on minions.  Updating add_job to match with another commit
Minor typo fix
Merge pull request #13283 from Mutantjessica/develop

Proofread doc/topics/tutorials/firewall.rst
Reuse the channel within the same fileclient
Convert firing events to channels
Remove print from debugging
Make the master Mworkers more robust to bad clients

Today if you create a client that does

```
import zmq

context = zmq.Context()
socket = None
while True:
    del socket
    socket = context.socket(zmq.REQ)
    socket.connect('tcp://127.0.0.1:4506')
    socket.send('foo')
```

Each asymetric call will cause a master process to go defunct. This patch will catch those exceptions, log them, and rebind the worker zmq socket.
On error in SREQ, reset the socket. This will fix all cases where the master is too busy and we leave the socket in a state where we've done a send but not a recv.
Re-add missing send, my editor messed up in weird ways when i did an "undo" apparently i missed this one ;)
be consistent with the _
Fix typo
Fix PEP8 E713 - test for membership should be "not in"
Fix PEP8 E713 - test for membership should be "not in"
Fix PEP8 E713 - test for membership should be "not in"
Fix PEP8 E713 - test for membership should be "not in"
Fix PEP8 E713 - test for membership should be "not in"
Fix PEP8 E713 - test for membership should be "not in"