Rename things in std::ascii for consistency

Tweak the names of various things in `std::ascii` to be more descriptive and consistent.

Also fix `Vec.ptr()` to always return the correct pointer even for zero-sized types; handle the issues with iteration over zero-sized types in the iterators instead.

[breaking-change]