Commotion service manager

Requires to other pull requests:
https://github.com/opentechinstitute/luci-commotion-apps/pull/35
https://github.com/opentechinstitute/commotion-openwrt/pull/68

This will take some more extensive testing to ensure stability and functionality. I am fully available to help with the testing.

**Setup:**
1. Flash 2 nodes with the pull request dependencies, and at least one node with the regular nightly build.
2. record the memory usage of commotion-service-manager (CSM) upon boot.
3. Set the default app lifetime on the nodes to 1 hour (in the apps portal settings page).
4. Add 5-10 unique applications on each node (including the node(s) without CSM), meanwhile monitoring for any crashes of CSM or unusually high memory usage.

**Expected results:**
1. CSM should not crash (check with `ps |grep commotion-service-manager`)
2. CSM should not use abnormally large amounts of memory or lead to node crashes. (check with `top`)
3. Apps added to a node with CSM should appear almost instantly on the other node with CSM.
4. Apps on nodes with CSM should **not** show up on nodes without CSM, and vice versa.
5. Apps should properly expire after one hour, both on the node they were added on, as well as nodes that picked up their announcements.
6. Expired apps should no longer appear in `/etc/config/applications`, and their Avahi service file should have been removed from `/etc/avahi/services`.
7. Running `kill -s USR1 $(pgrep commotion-service-manager)` should result in a `;`-delimited dump of service announcements in the file `/tmp/local-services.out`.

If you run into problems right from the beginning, be sure that `servald` is running on each node and that `servald id self` returns a valid SID. If not, restart `servald`.