Support daily and non-repeat calendar entries

This new changes add support for daily and non-repeat types of calendar entry: 

- A daily entry is executed at the specified day interval: for example a daily entry with interval of 2 days is executed every other day.

- A non-repeat entry is only executed the day for which it was scheduled.

These changes also includes other additions (list is getting longer by the day):

- Add flags to enable/disable the rain delay and weather adjustment features. Add quick web API for changing these flags and implement a virtual rain delay button (manual rain delay) for those without a real rain sensor or without Weather Underground account.

- Add web API to force a refresh from Google Calendar and Weather Underground.

- Add web API to get information about the programs generated from calendars and the weather.

- Avoid resetting all zones to 0 at the end of each program step. The code still reset all zones at the end of the program, or if killing the queue. The main goal was to make easier debugging what a program is doing using the bonescript simulation module.

- Some code cleanup in the hardware support modules and in server.js.

- use the `onoff` module for hardware-relays.js. The reason is that `onoff` works on both the BeagleBone and on Raspberry Pi. (The `onoff` module has less features than bonescript--it is pretty minimalist indeed--but it has everything needed for hardware-relays.js.)

- Automatic start on boot on Debian systems (init script, Debian-style) and make the program more compliant to the Linux FHS (i.e. store dynamic state/config in /var/lib/sprinkler).

- Multiple fixes from actual tests with my now completed controller (Raspberry Pi running Raspbian, 8-relays board).

(As a side note, I am not sure the rain interrupt callback is of any use. The rain sensor is a status input: it indicates when there is humidity. The system should delay watering as long as rain is detected, not just for a predefined period.)