Use Device objects to contain data for devices

- Allow creation from dictionary, writing to dictionary
- Generalize GET requests so that individual HttpResources don't
  have to implement it.

TODO:
- Use an actual database to hold the device data
- Keep Device instances in memory for quick access (caching from db)
- Proper testing of HTML and JSON APIs