Add IO abstraction framework

This is intended primarily for use as a storage abstraction.
It allows operations such as image-loading to be implemented
in a platform-independent fashion.  Each platform registers
a set of IO drivers during initialisation.  The platform must
also provide a function that will return a device and a specifier
that can be used to access specified content.

Clients of the API will primarily use device and entity handles.
The term "entity" is deliberately vague, to allow for different
representations of content accessed using different types of
specifier, but will often be interpreted as a "file" where the
specifier will normally be its path.

This commit builds, but is intended to be paired with a sample
implementation of "load_image" using a semi-hosting driver on FVP.

Change-Id: Id3b52f1c0eb9ce76b44b99fc6b6460803668cc86
diff --git a/plat/fvp/platform.h b/plat/fvp/platform.h
index 797e008..1b0a736 100644
--- a/plat/fvp/platform.h
+++ b/plat/fvp/platform.h
@@ -61,6 +61,8 @@
 						PLATFORM_CLUSTER0_CORE_COUNT)
 #define PLATFORM_MAX_CPUS_PER_CLUSTER	4
 #define PRIMARY_CPU			0x0
+#define MAX_IO_DEVICES			1
+#define MAX_IO_HANDLES			4
 
 /* Constants for accessing platform configuration */
 #define CONFIG_GICD_ADDR		0
@@ -212,7 +214,7 @@
 /*******************************************************************************
  * BL2 specific defines.
  ******************************************************************************/
-#define BL2_BASE			0x0402D000
+#define BL2_BASE			0x0402C000
 
 /*******************************************************************************
  * BL31 specific defines.