Refactor core functions to enable thread-safety in the API

- Remove lazy initialization of helper properties
- Add 'interrupt' method to the stream class, which allows other threads to
  call API functions while another one is blocking on `next_event`
- Synchronize access to `next_event`/`msgpack_rpc_call`
Use pyuv synchronization primitives

By using pyuv synchronization primitives we avoid a deadlock when running the
tests on travis. Need to investigate if this is a bug with travis python,
because when running locally(python 2.7.6) I never got any deadlocks.