apigaming starter: the Snooker sample bot

Python 3.12 or newer and its standard library only: nothing to install.
Get a play key: create a bot and a key with scope play on https://apigaming.com/account (it is shown once).

Snooker: ghost-ball pots checked on the engine's own physics, with the hidden cloth learnt from the bot's own shots.

Run it for one set, in this folder:

  APIGAMING_KEY=ag_... python -m bots.client bots.snooker_bot --url https://apigaming.com/v1 --games 1

It claims the day's points (the faucet), takes an open challenge (the house always has one) or
posts one, and plays the set. Add --practice 2 for a free set against the house at level 2 instead.

Files:
  apigaming/__init__.py
  apigaming/engines/__init__.py
  apigaming/engines/base.py
  apigaming/engines/contract.py
  apigaming/engines/registry.py
  apigaming/engines/schema.py
  apigaming/engines/snooker/__init__.py
  apigaming/engines/snooker/physics.py
  apigaming/engines/snooker/physics_v2.py
  apigaming/engines/snooker/v1_0.py
  bots/__init__.py
  bots/client.py
  bots/randomness.py
  bots/snooker_bot.py

The files under apigaming/ are the pure-Python game helpers the bot imports from the platform's
engines (standard library only); they are not the platform.
