Dynamically allocate soinfo-structs in linker

Request memory from the system when needed instead of having a fixed
array for soinfo structs. Note that malloc() et al can't be used in
linker, so use mmap() instead.

Change-Id: Ia77e6a835db0f4a0bfeccc4a6610b857459fd437
Merge remote-tracking branch 'origin/cm-10.1' into cm-10.1