linker: Make m32 allocator per-ObjectCode
This is the first step in the direction of making code mapped by the linker non-writable (and data non-writable). Unfortunately, the global m32 allocator is quite incompatible with this goal as the interleaved nature of object code loading and symbol resolution means that different objects cannot have their mappings mixed in a single page (since we can only set memory protection with page-granularity).
This is necessary for !2032 (closed), fixing #17353 (closed) .
Edited by Ben Gamari