[LibFuzzer] Declare and use sanitizer functions in fuzzer::ExternalFunctions
This fixes linking problems on OSX.
Unfortunately it turns out we need to use an instance of the
fuzzer::ExternalFunctions object in several places so this
commit also replaces all instances with a single global instance.
It also turns out initializing a global fuzzer::ExternalFunctions
before main is entered (i.e. letting the object be initialised by the
global initializers) is not safe (on OSX the call to Printf() in the
CTOR crashes if it is called from a global initializer) so we instead
have a global fuzzer::ExternalFunctions* and initialize it inside
FuzzerDriver().
Multiple unit tests depend also depend on the
fuzzer::ExternalFunctions* global so each unit test that needs
it initializes it for itself.
This last boolean argument is hard to reason about.
BTW, I don't know why you need it at all.
We must be able to link w./o any of those symbols (see test/UninstrumentedTest.cpp)