Add font-size absolute size keywords. Fix #3417

Also refactor `util::geometry` a bit.

r? @glennw