Added a Client ABC and a random implementation.

To be clear, an implementation that uses std::random_device.