Make `validation::NetworkService` strongly typed (#295)

By using a strongly typed network service, we make sure that we send and
receive the correct messages. Before there was a bug, a `SignedStatement`
was sent and a `GossipMessage` was decoded, but this could never work.
6 jobs for master in 21 minutes and 25 seconds (queued for 3 seconds)