Use signals and slots to abstract network comms

This is a much neater abstraction than the previous hand-coded solution.