Don't allow MSVC optimizer to make too many wrong assumptions about function pointer

The MSVC compiler is slightly confused about the jmp-call inside the __asm
block of the dynarec prologue. It will try to optimize the surrounding code and
ends up in overwritting the code function poiner with a sign extended version
of the lower 16 bit of code.

MSVC seems to be slightly more careful with void pointers
Enable link time garbage collection when link time optimization is enabled
merge patches from npepinpe: new-dynarec-u_int-fix branch and osx-use-system-zlib branch
OSX build fix
merged heads