Implement tech stuff, and some other things.

Seperated things like dotdict into seperate helpers module.
Fix problems with ints vs strs, make player.tech_name work, other stuff
Make all the .data attributes properties, so they all get updated on galaxy.update()
Add capability to access players by their names.
Clean up behaviour of getattrs when attrs not present

ie. KeyError is the wrong thing.
Also added hasattr to dotdict
Player: Add new ship rate per tick
Typos and fixes
example.py: A simple script to report a summary of player info.
tech: Fix an incorrect assumption - brr is base required, not current required

This was giving wildly wrong tech etas.
galaxy: return stars in correct order, so that galaxy.stars[x].star_id == x
Improve behaviour of non-calling-player Tech objects
tech: Fix incorrect result due to integer division in eta properties
Updated api and example code with new info about how AFK players look.
request: Handle auth failure gracefully
request: Allow disabling of JSON report interpretation to aid debugging