Does one frame's work: with a cooperative session, draws wanted tiles in priority order until budget is
spent; with a background session, starts renders up to the concurrency limit.
public bool RunFrame(TimeSpan budget)
true when work remains that another frame can do, so the shell should run one; false when
every wanted tile is on the surface, or the rest waits for room in the budget (call again after Update(in Viewport)).
Spec #33 viewer capabilities 1 and 3. Allocates nothing per frame beyond the tiles it starts.