Enforce thread safety at the type level

Closes #97

This is a big breaking change, but it is necessary to ensure the API is safe. As @csherratt [said](https://github.com/bjz/glfw-rs/pull/120#discussion_r11094904) in #120,

> The more I read the c source code for glfw the more I realize how dangerous it is for a multi-threaded environment. It's assumptions of safety are based on the fact that most functions should not be called from other thread then the main thread. There are large amount of global state that can be potentially modified every time `poll_event` is called. :(

My aim is to provide a safe API on top of which clients can create their own concurrent abstractions.

Please note that the monitor API is currently not thread safe. This will be amended in the future.