refactor: allocate vcpu structures from heap

On SoCs with large number of physical cores, hafnium memory footprint
gets very large, since the vm and vcpu structures are allocated
statically based on build time constants (MAX_VMS, MAX_CPUS). This patch
changes the code so that vcpu structures are allocated from the heap and
based on vcpu count in the manifest, as opposed to statically. This
gives huge savings since a lot of SPs need only be UP SPs, and combined
with previous changes where the first boot SP need not be an MP SP, thus
removing any mandates of presence of MP SPs in the system, provides
large reduction in memory footprint of the hafnium SPMC image.

Change-Id: I8c161d3bc164715e9218626e6839c7a213b8e8da
Signed-off-by: Raghu Krishnamurthy <raghu.ncstate@gmail.com>
diff --git a/src/vm_test.cc b/src/vm_test.cc
index e7934f8..4b588c9 100644
--- a/src/vm_test.cc
+++ b/src/vm_test.cc
@@ -285,7 +285,7 @@
 	ffa_notifications_bitmap_t global = 0x00000000FFFFFFFFU;
 	ffa_notifications_bitmap_t per_vcpu = ~global;
 	ffa_notifications_bitmap_t ret;
-	const unsigned int vcpu_idx = 1;
+	const unsigned int vcpu_idx = 0;
 	struct notifications *notifications;
 	const bool is_from_vm = true;