Update macports package manager to behave a little better.
Properly quote some parameters to MacOS dscl
Historically the recator has just called the "async" method of the runner and wheel clients, but this actually creates daemonized processes. In addition to creating a new daemonized process each event, the number of process it creates is unbounded, meaning that the reactor can easily use all available PIDs on a fairly busy master. In addition, there is no bound on the CPU that these are allowed to use (since they can create ALL the pids). This changes the reactor to create a threadpool for executing its master-side clients (runner/wheel). This threadpool has a configurable number of workers (max parallelism) and hwm (max queue size before dropping events).

The config defaults for reactor_worker_threads and reactor_worker_hwm may need to be adjusted, but these seem like sensible defaults for now.
Remove "fire_event" from AsyncClientMixin, since this was only added to remove infinite recusion in the reactor-- which is now not calling this API
Remove some un-used variables
Fix pylint
Pylint cleanup for threadpool
Switch to native file.file
Use environ.get
Use native file.write
fix error where file.recurse would mess up names on salt-ssh
Fix for #18248
doh! Need the thin var, no can haz self.thin yet!
Properly quote some parameters to mdadm
Add certifi to the deps in thin tarball
Add missing comma
Properly quote some parameters to mdadm
Add some salt
Use file.append
Just have curl do the writing