Adding eject support

Taken from peglers fork, merging impossible due to so many other changes
Doing some additional restructuring
Fixing methods
Fixing imports
Fixing classes
renaming hb_api to just hb
Adding OS detection to ejecting
Testing and fixing ejecting
Adding try-catch around OS detection
Merge pull request #37 from JasonMillward/eject

Eject - Complete