textUtils: {width: x, height: y} instead of [x, y]

`textUtils.ts` passes `number[]`s around as `[width, height]` pairs. That's kinda silly, since you end up writing `wh[0]` to get width and `wh[1]` to get height. This branch puts them in a `Util.Text.Dimensions` which is an object like `{width: x, height: y}`.

No QE needed, since this is just a refactor and it's passing all the tests.

Close #596.
pls unit test this fn