• Rewrite all the bindings in a better way

    All the FFI functions have fancy types now and use references instead
    of raw pointers for arguments.
    
    Now, a CFRef<T> value represents a refcounted value to be released on Drop,
    CFShared<T> represents a shared value that can be retained to produce a new
    CFRef<T> (this will be a useful distinction for mutable types, where a
    bare T shouldn't be retainable to keep unique ownership).
    
    To simplify things and avoid either having wrappers of wrappers of all
    methods behind traits, I put the safe and thin methods directly on the
    opaque FFI types.
    
    Let's begin the infinite bikeshedding!
    nox committed Sep 30, 2016