Update

Uses protocols for callbacks, updated readme, license, and example.