Offshoot from D2785. Mostly this is the 'easy part' from that diff.
There are a number of u16/u32 in RangeManager that are actually 'packed' arrays. This replaces them with a proper PackedArray class, with an interface similar (enough) to std::array.
This also introduces a few more type-safety changes, which should help make sure that we don't index with negative numbers nor forgot to check for GAIA/invalid player. The types remain implicitly convertible to each other but at least the intent is clear.
On Clang ~6 (/minimum supported XCode), this compiles down to either identical assembly at O3 or equivalent (or performance doesn't matter much anyways).
I would like some profiling on MSVC17 and GCC to confirm that there are no differences. I've provided a test map, to run Profiler2 on and compare Sim update times.