Add utility for calculating box properties

We are doing inner width and height calculations all over, a utility will clean things up a bit.
These extra `dims` lines are showing 'this is how the expected dimensions were calculated' rather than 'recreating the dims that should be accessible off the widget, but aren't because of bad code factoring'.

`.width()`, `.height()` and `.margin()` are meant to be the api methods used to configure widgets. Adding on `.dims()` would mean people would have to configure their widgets doing something like `widget.dims().width(300).height(200)`, I'm a bit -1 on that.

Longer, readable tests feel better than shorter, harder to read tests, so I don't really think this extra boilerplate is getting in the way.

Could we leave this as is for now, and if it looks those extra lines are starting to get in the way we could figure something out?