Made protocol declarations optional and built in closure functionality for convenience.
Made delegate methods non-optional.
Removed workaround that previously prevented bug (might need to be tested but it works for me).
I created an error constant and reused it in both the closure callback and the delegate callback.
Merge pull request #36 from AndrewGene/master

Built in closure functionality