This achieves two things: - The allocator can report more specific errors - Callers can (and now do) use TRY() :^)
This matches MutexLocker, and doesn't sound like it's a lock itself.
...and also RangeAllocator => VirtualRangeAllocator. This clarifies that the ranges we're dealing with are *virtual* memory ranges and not anything else.