Refactor the callback wrapper CurlCallback to be a trait and accept a pairing of data/unsafe callback function. This is effectively a significant refactoring and brings us closer to providing a type-safe interface to the option handling mechanism.

Before work in this branch is complete, the following needs to be done:
  * Add error checking on all setopt calls
  * Fix documentation to be up-to-date
  * Add safe wrapper around slist
  * Add enum to represent the various curl options (may remove the variants of easy_setopt* after this is done)