Use sockets for local forked process communications

Using TCP for local forked process comms wasn't terribly robust. This PR changes the `Union` and `UnionApprovedWorkspace` to use unix sockets for interprocess communication instead.

This edges us closer to the "medusa should be able to run its own specs" goal.