For separation of concern, it makes more sense for these quickcheck tests to take and return the fully decoded model arguments. This way we don't need to test any decoding errors, which can be done separately.
However since the model has some raw fields in there, like adRawData, we still need some decoding/encoding in these tests. So we should export these nested binary encoders from the Encoding/Decoding modules, so they can be used in the tests.
This PR currently uses IO for randomness, which is non-deterministic. Since these are tests, we want to be able to reproduce them, so we should make sure that all randomness is deterministic, via a hardcoded seed in e.g. the toplevel spec, which is then used to initialize deterministic generators.
Implements various parameters for the Client and Authenticator emulation to produce incorrect behavior.
Currently Draft to serve only as discussion.