crypto: store thread id as pointer-sized

In https://github.com/MSOpenTech/libuv/commit/59658a8de7cc05a58327a164fd2ed4b050f8b4f4
the return of uv_thread_self() was changed from unsigned long to
uv_thread_t.

uv_thread_t is a HANDLE (pointer-sized) on Windows, which means that
on Win64 it cannot be stored with CRYPTO_THREADID_set_numeric without
data loss.

Furthermore, without this change there will be a build break on Windows
when the libuv change is integrated into Node, because of the
conversion from HANDLE to unsigned long.

Other related commits:
https://github.com/joyent/node/commit/5845a6bcd5b36168bdddeb85da8d8d9d36de7642
https://github.com/MSOpenTech/libuv/commit/919d8ec63ac53566ad1f090058ec15966bd0e960
It's not a code generation issue, it's a compile time issue. static_cast<uintptr_t> will give a compile-time error in case the operand is an int *
error C2440: 'static_cast' : cannot convert from 'int *' to 'uintptr_t'
Weird, isn't it?
Considering uv_thread_t is opaque, and the crypto stuff only uses it to check equality between two thread id, the most powerful cast seems desirable, and the only thing we have to worry is loss of data (hence the assert).