Region API consistency and helper functions

This is a series of changes inspired by @lewishaley's [perceptive comment on a previous review](https://github.com/wmanley/stb-tester/commit/604ff6182658de0bbf3d9f2256bfc57b7a508b3c#commitcomment-7133004) about the inconsistency of use of `Region` as a parameter to functions.  These changes are intended to correct these inconsistencies by enhancing `Region` to handle infinities and then using the (not so) special value `Region.all` to represent the whole frame where we want to.
`Region`, as a `namedtuple` is immutable, much like strings are.  This follows the same pattern that `namedtuple._replace`, `str.strip()`, `str.replace()`, etc. do.