implement UV_EXTERN_VISIBILITY_DEFAULT for GCC and Clang

Previously, the `visibility` variable in common.gypi only controlled whether GCC or Clang builds would build with -fvisibility=hidden, but unfortunately this effect was negated by a define in uv.h setting UV_EXTERN to mark symbols with `default` visibility. This change sets -fvisibility=hidden as default and adds a define for setting UV_EXTERN to `default` visibility, which also enables building with `hidden` visibility, for example as a static library.