Add a safe enum wrapping for setting curl options, a callback interface that is encapsulated in a trait

There's still some work to be done on cleaning up the HTTP interface, and the callbacks are not passed in the option type currently - however the public interface is much cleaner.