vmbase_example: Run most tests using dynamic PTs

Instead of enabling the dynamic page tables for a short duration and
switching back to idmap.S, enable them early and keep them (almost)
until main() returns.

Map the DT before it is accessed by the tests. As a result, the
assertion that the DT must be at a hard-coded location can be lifted and
we can remove the mapping from idmap.S. Note that the PT test was
previously using .map_rodata() for the DT but, given modify_fdt(), we
must actually use .map_data().

For the PCI BAR, avoid a BBM violation but detecting if the region is
already mapped. To do so, implement RangeExt for MemoryRegion.

Test: atest vmbase_example.integration_test
Change-Id: I1abbf1566c579282742f5a0936e0934e69c38797
diff --git a/guest/vmbase_example/idmap.S b/guest/vmbase_example/idmap.S
index 268de5f..2e62085 100644
--- a/guest/vmbase_example/idmap.S
+++ b/guest/vmbase_example/idmap.S
@@ -45,7 +45,7 @@
 
 0:	/* level 2 */
 #if defined(VMBASE_EXAMPLE_IS_BIOS)
-	.quad		.L_BLOCK_MEM | 0x80000000	// DT provided by VMM
+	.quad		0				// 2 MiB not mapped (DT)
 	.quad		.L_BLOCK_MEM_XIP | 0x80200000	// 2 MiB of DRAM containing image
 	.quad		.L_BLOCK_MEM | 0x80400000	// 2 MiB of writable DRAM
 	.fill		509, 8, 0x0