refactor categories

Completely refactored categories.  The interface can now give a list of all categories and a list of all devices in a given category. It can also give the label for a corresponding number.  Also updated device to respond to "category" with the label of it's category number.

Tweaked the Interface initialization so that it no longer needs to load everything.  Devices, attributes and categories are now lazy-loaded and memoized.