Refactor, break apart and move to lib/ folder

"everything in one file" was becoming increasingly less appealing
so hear the core, the error handler and each endpoint have been
broken into separate files. This does lead to some fairly ugly
calls where the original object is still passed around in "this",
hopefully that will be improved later.
Beyond one file, breaking into multiple objects means that now only
the two public methods are actually exposed to the user which is
great.
Refactor token grant to use async version of crypto.randomBytes
Add support for extension grants (+ release v1.1.0)

Allows users to support their own grants, as defined in the spec,
by implementing the extendedGrant method. (Documented).