Merge pull request #121 from bjz/error-callback

Use a channel instead of a trait object for handling errors
Enforce thread safety at the type level

Closes #97
Update examples
Improve documentation.
Merge pull request #122 from bjz/thread-safety

Enforce thread safety at the type level
Return the error receiver when `init` is called

We also remove the timestamp for errors. This is because calling glfwGetTime before glfwInit was called will cause an error. This would cause the error callback to be called infinitely.
Update examples