Simpler entry of locally discovered nodes

This involved 3 commits, but each is dependent on the one before so I thought it worth combining them into a single pull request.

Worth mentioning a change to "discovery.All()" function. A grep showed it was only used by the rest API, which always failed because the return value could not be converted to JSON. It emitted some types exclusively made up of private members (cacheEntry). I thought there was more downside in exposing the internally used bytes compared with re-packinging the data as strings, which would have resulted in a second stage of convertion in the web API function anyway.

Use of a datalist in the GUI was chosen as it doesn't alter the design of the interface, although there is no support for a datalist in Windows Mobile or Safari, so this might need improving at some point, nevertheless I hope it's worth including as it stands for now.

PS: This is my first commit pull request on github ever.
How about this:

Add a new function `discovery.LocalNodes()` that returns an array of local `protocol.DeviceID`.

Add the `MarhalJSON()` function to `protocol.DeviceID` so that an array of them can be serialised. This will be OK a we wont be using them as JSON keys, just JSON values.

Delete the `discovery.All()` as it will be obsolete. Unless you're aware of anything else calling it. I couldn't find anything with grep.

Fix `restGetDiscovery` making it return an array of device ids as strings. I can't think of anything else this URL can return right now and it currently doesn't work at all.

Or this:

Move the tranformation of `protocol.DeviceID` to strings into `restGetDiscovery`, which would retain fidelity with the value returned by the `All()` function without modifying it. This is essentially what my current code does, but perhaps in the wrong place. You would end up with the following coming out of the web method:

    {
        "24YY5LO-XATGJRE-CVQA6AL-HKNG6DC-3NE2XPL-PAL5FNK-NRYUSS7-VR5HGQ7": [
            { },
            { }
        ]
    }

The empty object would be populated as and when it becomes nessesary to make the `cacheEntry` fields public, but I don't propose dealing with that now.