Some suggestions

You asked for me to comment on your runners, so I am issuing this pull request as a means of adding some comments to the code.  You don't have to merge it, but can take what you want (or nothing at all).  I will be adding some line comments shortly to explain some of the differences.

There are two main changes:

1.  The data object needs to be recreated for each `typeset()` call, because they are queued until the library can process them and if you change the data object that was passed to a previous call in order to set up the next one, it will change the data for both.  (I suppose the library could copy the data as an alternative.)  The only shared part is the `state` property, which is used to maintain the state from one `typeset()` call to the next.

2.  The `useGlobalCache` flag can be used to manage the global SVG object rather than doing it by hand.   I have added (and removed) code to do that.
This is the new `data` element, with the common `state` value.  Since it is inside the loop, we can set the `math` property during creation.  I also set the `format`, `useFontCache`, `mml`, and `svg` properties directly.  Note that if `useFontCache` is false, `useGlobalCache` is ignored, so there is no need to set it to `false`.  On the other hand, it might be better to set `useFontCache` to `true` and use `outputChoice` to set `useGlobalCache` instead.  That would mean you would get a local font cache for each SVG, so you still get savings if character are reused within a formula.  Up to you.