use ModuleInfos from shared libraries
check for module hijacking

 - This is needed to guarantee correct initialization
   of modules and identify library dependencies.

 - Abort the program with a detailed error message.
   Symbol collision bugs are hard to find so it's better
   to error out early.
add SHARED option to posix.mak

- if set builds a shared libdruntime.so
unit tests for shared libraries

- Use a modified unit test handler which allows to selectively
  run unit tests. This is necessary because a shared library contains
  the code for all compiled modules, thus the default unit tester
  would run everything at once.
add shared library tests
add more tests for gc scanning and thread init