Merge pull request #480 from public/opaque-typedefs

Tell cffi these opaque types are pointers.
Merge pull request #481 from public/asym-bindings

More bindings for asymmetric stuff
Call CRYPTO_set_locking_callback

So that we actually get some thread safety
Use the same platform ifdef check as PyPy
Add pthread_mutex mode for __APPLE__ Computers

because their sem_init is implemented as exit(1)
Remove the sem_init implementation

pthread_mutex works on Linux anyway and isn't obviously any better at
coping with fork() issues.
Test case for the locking stuff.

Probably not particularly great at finding issues on all platforms.
Notably Windows doesn't seem to crash without it anyway.
Only init our locking function if Python didnt

Adds quite a bit of complexity, might be better to set ours
unconditionally but still import _ssl so that it doesn't overwrite ours
at some point later.
Update threading stuff for split backend/bindings
Fix some compiler warnings