just pass the buffer straight to the parser

using CString is both a bad idea in general, as it will choke on null
bytes in the buffer, *and* a performance issue, as it performs an
allocation.
allow(non_uppercase_statics)
simplify should_keep_alive
drop unnecessary casts
use size_t instead of a literal u64
actually print the URL
factor buf_as_str out
-fexceptions, so that Rust failures are guaranteed to propagate correctly
always compile a clean http-parser
new, trait-based handler implementation
turn ParserType into an actual enum
new, handwritten bindings!

This halves the size of the struct to 32 bytes (matching the C version),
and gives us access to all the fields.