Announce To Master Without An IP

**NOTE**: This is still a work in progress.  I am currently working on the master's side of things so there's still some tests broken at the moment.

This pull request was written to fix #42.  In this pull request we are:

* No longer using a GET request to determine if the agent exists first
* POSTing directly to the master
* Passing along a new agent field called `systemid` that's generated using the new `get_system_identifier` function. 
* Simplifying the service module

The `get_system_identifier` function will:
* Produce an integer that identifies the system based on an XOR of the MAC addresses associated with the network adapters installed on the system.
* Cache the produced value so it's reused next time the agent is launched.  This should ensure that even if the mac addresses change the `systemid` value should not.  Location You can override the cache location with `--systemid-cache`
* Keep better track of agents even if the hostname/ip changes
* Help to ensure that even if there are duplicate hostnames on the network we can tell two agents apart.  This will also prevent the unique constraint on the table from breaking in the event of duplicate hostnames too.