Tests executables made several assumptions that are only valid on
some system/compiler:
* That the main function is found even in a shared library (not true
on windows). To fix this, test_main is now an ojbect library
* That the extern test_registry in test.cpp will be initialized
before any actual test uses it. This was either a lucky coincidence
on linux, or being related to the variable being initialized in a
shared library. The variable is now initialized by a function,
guarantaaing initialization order.
* That test.hpp is only inluded once per binary, which was only true
because it was once part of a DLL, once the executable, hiding ODR
violations. As now it's linked twice within the same binary, some
functions had to be made inline.
* not is not a valid C++ operator, replaced all occurences with !