Add crypto provider internal API.

This commit re-factors the crypto code to make it more modular. It will make
it possible to choose an alternative implementation at compile-time.
The main changes are:

- Add core/include/tee/tee_cryp_provider.h.
Defines struct crypto_ops which gathers the functions that were previously in
core/include/tee/tee_{acipher,authenc,cipher,hash,mac}.h and also contains
some functions to manipulate "big numbers".
Prototypes of asymmetric cypher functions were adjusted to use generic key
types (rsa_keypair_s, rsa_public_key_s, and so on), in which the big numbers
are accessible though an opaque type (bignum *).
- The code that was previously in tee/tee_{acipher,authenc,cipher,hash,mac}.c
was moved to lib/libtomcrypt/src/tee_ltc_provider.c, which also
replaces tee_ltc_wrapper.c. This file uses LibTomCrypt and libmpa to implement
the crypto_ops interface.
- tee_svc_cryp.c still handles data copying to/from user and parameter checking
and formatting, but it has no direct dependency on LibTomCrypt/libmpa anymore.
Instead, it relies on a global crypto_ops instance to implement the crypto
algorithms.

This code compiles but was not tested.
Address Jens' review comments (PR#35)

Changes:
- Remove bignum typedef, use 'struct bignum'
- Bignum allocation function (in crypto_ops) now takes a size argument
- Move bignum allocation functions (for key structs) to crypto_ops;
  discard the now unused 'preallocate' function
- Suppress uppercase/camel case: N, dP, dQ, qP => n, dp, dq, qp
- Delete white lines in switch statements
- Move tee_cryp_init to init.c
Address Pascal's review comments (PR#35)
Fix bugs in reworked crypto code

This commit + 7598956 (Updates for ARM Trusted Firmware tag v1.0) +
b8976a6 (plat-vexpress: fix non-debug build) was tested on Foundation_v8 with
xtest. Failure of test 1001 is due to a missing static TA in the vexpress
build.

+-----------------------------------------------------
Result of testsuite XTEST_TEE_TEST:
XTEST_TEE_1001 FAILED first error at xtest_1000.c:174
XTEST_TEE_1004 OK
XTEST_TEE_1005 OK
XTEST_TEE_1006 OK
XTEST_TEE_1007 OK
XTEST_TEE_1008 OK
XTEST_TEE_1009 OK
XTEST_TEE_1010 OK
XTEST_TEE_1011 OK
XTEST_TEE_1012 OK
XTEST_TEE_2001 OK
XTEST_TEE_2002 OK
XTEST_TEE_2003 OK
XTEST_TEE_4001 OK
XTEST_TEE_4002 OK
XTEST_TEE_4003_NO_XTS OK
XTEST_TEE_4003_XTS SKIPPED: "XTS not supported"
XTEST_TEE_4004 OK
XTEST_TEE_4005 OK
XTEST_TEE_4006 OK
XTEST_TEE_4007 OK
XTEST_TEE_4008 OK
+-----------------------------------------------------
Address review comments
Simplify code in tee_svc_cryp_obj_copy.
Delete some more useless casts
plat-vexpress: fix non-debug build

Fixes a number of build errors when 'PLATFORM=vexpress' and 'DEBUG=':
- '<var> may be used uninitialized'
- 'dereferencing type-punned pointer will break strict-aliasing rules'
This one is addressed by adding -fno-strict-aliasing to the cflags for the
problematic files, which is a temporary solution.
- 'inlining failed'

Also, make sure tee_svc_syscall_table is aligned on a 32-bit boundary.
Otherwise, an alignment fault might occur:
  ERR [0x0] TEE-CORE:tee_pager_print_error_abort:101: data-abort at 0x602f16b
  FSR 0x1 PC 0x6007bd4 TTBR0 0x603804A CONTEXIDR 0x1
  CPUID 0x80000001 DBGPCSR 0x0 CPSR 0x80000013 (read from SPSR)
  ERR [0x0] TEE-CORE:tee_pager_handle_abort:164: [TEE_PAGER] alignement fault!  (trap CPU)

Note: on Foundation_v8, I measured a ~3x speedup between debug and non-debug
builds for asymmetric crypto tests.

Conflicts:
	core/arch/arm32/kernel/sub.mk
	core/lib/libtomcrypt/src/sub.mk
	core/tee/sub.mk
Updates for ARM Trusted Firmware tag v1.0

* New load address for plat-vexpress,fvp
* Entry vector extended with system_off and system_reset
  entries
Put in place OpenSSL crypto

- Build with: WITH_CRYPTO=openssl (default is WITH_CRYPTO=tomcrypt)
- This will fetch the OpenSSL source tarball, and build a number of files.
Currently the OpenSSL crypto provider only has the big number functions.
- 'make clean' will remove object files, but will not delete the OpenSSL
sources. Use 'make distclean' for that.

Usage example:
$ export CROSS_COMPILE=arm-linux-gnueabihf-
$ export PLATFORM=vexpress PLATFORM_FLAVOR=fvp
$ export WITH_CRYPTO=openssl
$ make
$ make clean
$ make distclean