nil: Enforce units via Rust types
We add a units generic parameter to Extent4D and Offset4D and then make every helper take and return the right type. The mul and div_* helpers only half-enforce types but it's better than nothing. We leave them non-public so no one outside extent.rs uses them.