Major overhaul of rust API

Cleans up the API to be a bit more rustic
- No more out-pointers, only return-by-value
- Add key generation/derivation methods
- Replace `type` with newtypes so that keys can only be used as the API intends
- Split FFI bindings into separate file
- Split constants into separate file
- Add documentation everywhere
- Add lints for code style + documentation
- Add explicit CC0 license

These changes are in line with what I need for rust-bitcoin. I'm sorry to submit a single PR with so much to review :) I can submit individual commits as separate PRs if that would help.