macaroon 0.3.0

Fully functional implementation of macaroons in Rust
Documentation
v0.3.0 tasks:
x verify (test) unsatisfied third party caveat
x docs: note that 'validate' does not check much/anything
x resolve base64 encoding situation
    => 'deserialize' can detect type of *raw* stuff; ok.
    => `deserialize` vs `deserialize_raw`
       => deserialize works on base64-encoded or JSON; make this generic so it works with &str?
       => deserialize_binary works on internal binary; only V1 or V2
x basic compat testing
    x libmacaroons examples
      all serialize/deserialize combinations (from pymacaroons)
      some other pymacaroons examples


---

- sanity test bytestring length
    https://github.com/rescrv/libmacaroons/blob/master/macaroons.h#L43
- sanity test caveat count
    https://github.com/rescrv/libmacaroons/blob/master/macaroons.h#L45
- some more docs coverage (all types; notable functions)
    => particularly errors; also reference back from verify/parse functions
- a bit more test coverage, if easy? eg, of errors

- expand doc coverage (and doc tests?)
- main docs:
    => mention 'location' and 'identifier' in context of macaroon
    => third-party caveats in a sub-section (?)
    => use meaningful location and identifier in the example
    => "show" serializatino into base64 token in main docs
    => mention HMAC, libsodium, etc in the main docs
    => split in to simple example and full third-party caveat example?

nit picking:
- doc: Format variants, with brief description. maybe a recommendation about which to use?
- docs: hide 'Result'?
- rename 'initialize' to... 'initialize_thread'?


## bigger/later

- ensure full test coverage
- remove ByteString type (at least from public interface)
- consider tweetnacl instead of full libsodium?
    https://crates.io/crates/sodalite
- more compat testing
    libmacaroons test library (reading/writing vectors from disk)
    macarooncompat stuff