runner: Introduce TestInfo to wrap the raw test json
The constructor now performs appropriate verification on the json
configuration, rather than open-coding it in get_all_test_info(). Users of
the dictionary-like json are altered to use attributes.
An all_instances() method is added to return test instances for all suitable
environments, optionally with a subset filter. This is used in preference to
three open-coded loops, generating instance names.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>