Reduce memory waste in PoolAllocator due to alignments Prior to this change, the PoolAllocator wasted memory in alignments. This was due to the fact that alignment was made to the wrong values, and they were fixed with more alignments and conservative extra space allocations. This change makes sure that alignment is applied once, and such that the actual pointer that needs to be aligned is aligned, not the header that might come before it, and that allocation size is calculated precisely. This improves memory allocation by reducing waste, but only affects the use of the pool in the translator, as Vulkan secondary command buffers (the other user) use an alignment of 1 and take a different path. Running TracePerfTest.Run/vulkan_manhattan_10 on Linux, the total size of allocations made by this class for the translator goes down from 466944 bytes to 376832 bytes for a ~20% improvement. Bug: angleproject:3167 Change-Id: Ib4e6fd23ac32c8fb21810b20cd383758b8bff47f Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3206255 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>