MemoryMappedFile fixes

This patch includes a few fixes:

	* CreateNew will actually create a memory map file, the previous logic
	  in MemoryMapImpl.Open was wrong, and would fail if the file did not
	  exist.   We now cope with this (bug #20052 was caused by this).

 	* Some exceptions were wrong, so this patch updates the
	  exceptions being thrown to be the right ones

	* On Mobile, we inverted the logic to ensure that capacity must be
	  bigger or equal than the file size (which is what the API needs to do),
	  previously it performed the opposite test.

Added tests that match the behavior on .NET for this.