Visual C Compiler compatibility

Visual C won't compile as the setup file uses gcc specific command line
arguments and some gcc constructs are not supported in microsoft
compiler.

python-xxhash.c:
- Python type initialization requires NULL to break circular reference
- Compiler command line preprocessor definition needs to be explicitely
converted to string

setup.py:
- now uses os.name to determine the platform type

this last change does not check for the compiler itself, but for the platform.  there ust be a better way to do this.but can't find any documentation.
Each compiler has its own quirks.  Microsoft compiler does not see VERSION and XXHASH_VERSION as strings and generate the following error message:

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IC:\Users\sgagnon\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.4.0.1938.win-x86_64\include -IC:\Users\sgagnon\AppData\Local\Enthought\Canopy\User\PC /Tcpython-xxhash.c /Fobuild\temp.win-amd64-2.7\Release\python-xxhash.obj -DVERSION="0.1.0" -DXXHASH_VERSION="r35" python-xxhash.c
[...]
python-xxhash.c(401) : error C2440: 'function' : cannot convert from 'double' to
 'const char *'
python-xxhash.c(401) : warning C4024: 'PyModule_AddStringConstant' : different types for formal and actual parameter 3
python-xxhash.c(401) : error C2143: syntax error : missing ')' before 'constant'
python-xxhash.c(401) : error C2059: syntax error : ')'
python-xxhash.c(402) : error C2065: 'r35' : undeclared identifier
python-xxhash.c(402) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'int'
python-xxhash.c(402) : warning C4024: 'PyModule_AddStringConstant' : different types for formal and actual parameter 3
error: command '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\amd64\cl.exe"' failed with exit status 2

TOSTRING() tells the preprocessor to cast these into string so the compiler does the proper things with the definition.  Using (#VERSION) in place would do the trick, but the # is not that common and I preffer something clearer as to the purpose.

You are correct about define_macros and makes things cleaner:

[...]
if os.name == 'posix' :
    extra_compile_args = [
            "-std=c99",
            "-O3",
            "-Wall",
            "-W",
            "-Wundef",
            "-Wno-error=declaration-after-statement"  # ref: http://bugs.python.org/issue21121
        ]
else:
    extra_compile_args = None

define_macros = [
        ('VERSION', VERSION),
        ('XXHASH_VERSION', XXHASH_VERSION)
    ]
[...]

I will send a separate pull request.