Don't finalize context if it's already terminated explicitly.
Add a finalizer that closes socket.

This way bound sockets will not linger forever and leak resources.
Make Socket.t = Context.t * <zmq_socket> to prevent preliminary GC

Without keeping a reference to the context, the GC will attempt to
finalize the context too early, hanging the GC in the finalization
routine.
Never raise exceptions from finalizers.
Make sure context finaliser never hangs.
Merge pull request #16 from whitequark/finalizers

Finalizer improvements