use processes instead of threads for handling upcalls

Reviewer: @harshsin

This has several advantages:

 - The main process will not block upcall processes while writing to forwarding
   datastructures.
 - Upcalls see the forwarding state changed atomically between barriers, as is
   already the case with kflows.
 - The LuaJIT pipeline can use multiple cores.
 - Pipeline implementors don't need to worry about locking.

The complicated port quiescing code is completely removed. The forwarding state rwlock is also removed.