refactor timeout evaluation to use multiproccessing in favour of threading

This should be less fragile than using the `threading` module.

Needs testing!
---------------------