Add library setup and teardown APIs

Add the following two functions to allow platform setup and teardown
operations for the full library to be hooked in:

* mbedtls_platform_setup()
* mbedtls_platform_teardown()

An mbedtls_platform_context C structure is also added and two internal
functions that are called by the corresponding setup and teardown
functions above:

* mbedtls_internal_platform_setup()
* mbedtls_internal_plartform_teardown()

Finally, the macro MBEDTLS_PLATFORM_SETUP_ALT is also added to allow
mbedtls_platform_context and internal function to be overriden by the
user as needed for a platform.
diff --git a/include/mbedtls/platform.h b/include/mbedtls/platform.h
index b1b019e..a9ff7e4 100644
--- a/include/mbedtls/platform.h
+++ b/include/mbedtls/platform.h
@@ -288,6 +288,51 @@
 #endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */
 #endif /* MBEDTLS_ENTROPY_NV_SEED */
 
+#if !defined(MBEDTLS_PLATFORM_SETUP_ALT)
+typedef struct mbedtls_platform_context mbedtls_platform_context;
+#else
+#include "platform_alt.h"
+#endif /* !MBEDTLS_PLATFORM_SETUP_ALT */
+
+/**
+ * \brief   Perform any platform initialisation operations
+ *
+ * \param   ctx     mbed TLS context
+ *
+ * \return  0 if successful
+ *
+ * \note    This function should be called before any other library function
+ */
+int mbedtls_platform_setup( mbedtls_platform_context *ctx );
+/**
+ * \brief   Perform any platform teardown operations
+ *
+ * \param   ctx     mbed TLS context
+ *
+ * \return  0 if successful
+ *
+ * \note    This function should be after every other mbed TLS module has been
+ *          correctly freed using the appropriate free function.
+ */
+void mbedtls_platform_teardown( mbedtls_platform_context *ctx );
+
+/**
+ * \brief   Internal function to perform any platform initialisation operations
+ *          Only exposed to allow overriding it, see MBEDTLS_PLATFORM_SETUP_ALT
+ *
+ * \param   ctx     mbed TLS context
+ *
+ * \return  0 if successful
+ */
+int mbedtls_internal_platform_setup( mbedtls_platform_context *ctx );
+/**
+ * \brief   Internal function to perform any platform teardown operations
+ *          Only exposed to allow overriding it, see MBEDTLS_PLATFORM_SETUP_ALT
+ *
+ * \param   ctx     mbed TLS context
+ */
+void mbedtls_internal_platform_teardown( mbedtls_platform_context *ctx );
+
 #ifdef __cplusplus
 }
 #endif