switch-host-gcc.sh: make the code more generic

... so that we do not need to patch it per release
common.cmake: use hidden visibility by default

... in order to prevent hard-to-debug interferences between shared
libraries when multiple CL-based GCC plug-ins are loaded by a single
GCC instance.

Previously, the compile-self-02-var-killer test, which sets the
MALLOC_PERTURB_ environment variable, printed some binary garbage in
diagnostic messages.  The cause was that plugin_init() from libsl.so
incorrectly called cl_global_init() from libcl_smoke_test.so, which
initialized the message printing callbacks to share the handlers by both
plug-ins.  Consequently, after the call of free_plugin_name() from
libcl_smoke_test.so, libsl.so kept using the already freed plug-in base
name in diagnostic messages.
storage: provide topologically-sorted list of functions

... and make cl/pointsto_fics.cc use it
fwnull: do not rely on fnc UIDs ordering

They seem to be assigned in the inverted order with gcc-4.8.x.