DRY, add docs/comments, other minor cleanup

My colleagues and I have found osin to be a useful library and reference, and we've made a few changes that we'd like to contribute back. Overview:

* DRY and simplify core code
* DRY example code
* Add and standardize comments
* Stream JSON response rather than buffering
* Fix typos
* Check the error from ParseForm
* Allow omission of `client_secret` when using query params for auth
* Shorten some function names
* Add some test cases
* Other minor cleanup

The result is less code overall, far less repeated code (though that hasn't been totally eliminated), and better godoc generation. Everything here is pretty minor and doesn't really affect behavior or overall structure of the code.

Feedback or questions appreciated. Thanks!