Add support for parallel and event driven fact submission

Running the push facts script in our production environment for a large volume of frequently updating fact files results in time outs and/or takes too long.

The current behavior is to process and submit each fact file serially. This PR patches the fact handling flow to wrangle all the requests first and then submit them across multiple threads.

This PR speeds up the time to complete for fact pushes by ~9-14x w/12 threads.

Parallel mode can be invoked with the --push-facts-parallel argument.

The second but related commit uses inotify to monitor the yaml directory for fact changes and pushes changed facts to foreman more real time (runs forever). Uses the non-blocking requests if --push-facts-parallel otherwise the inotify event processing is blocked.

Watch mode can be invoked with the --watch-facts argument.