As of SM45, a JSContext contains a global object, can evaluate script and such, and is restricted to one thread.
Later SM versions rename things and move components around, such that a SM45 runtime is essentially a SM52 Context, and an SM45 Context is more similar to an SM52 Compartment (which itself gets renamed in SM68 to a Realm).
To prepare for this, it is simpler to wrap the AutoRequest object in a custom Request object, as that lets us change much less code down the line.
It is also good to wrap access to the JSContext* taken by most JSAPI functions behind the request, which lets us later change what that points to.