Boundary checks / synchronization / tests for MemoryMappedFile

Hardening MemoryMappedFile against boundary conditions and
edge cases. Many tests added.

Thread safety has been dropped entirely as part of this change:
expected usage is single threaded. It was previously possible
to unmap the file, but the BufferIterator would carry on
attempting to read from the address space.

Motivation: The ZoneInfoDB code will soon be modified to expect
exceptions if reads / writes are out of bounds and it's more
appropriate to make the exceptions part of the MemoryMappedFile
contract.

Bug: 31008728
Test: CtsLibcoreTestCases
Change-Id: I58cba7498c5fcd074054b13dbd6b313d6c1bfbe6
5 files changed