WIP: Support different processors

Support different types of processors

Not ready for merge yet

Goals:

extract all logic related to forking into a separate class
make it easier/possible to support alternate processor models such as threading