lifeguard_watch_store

The lifeguard_watch_store is now responsible for all storage of watches.
lifeguard_watch_manager is still how all interaction with watches is
done, but this is now only responsible for orchestrating the various
subsystems to do a specific change.
Fix issue where the error message for no watches was not spanning
columns
lifeguard_watch_manager manages storage process
Disable failing tests temporarily

I can't seem to figure out why this is causing tests to fail. Well, I'm
pretty sure it is because the dets table is not being closed properly.
But I can't figure out a reliable way to terminate the gen_server before
each test.
In-memory ETS of watches for watch manager

The lifeguard_watch_manager will store all the watches and some state
assocaited with them in an ETS table. This sets up the foundation for
this, although its not completely functional yet.
Internal state uses new watch model

The watch manager, the watch store, and the watch webmachine endpoint
now all use the lifeguard_watch model.
lifeguard_watch_manager populates ETS on init

Now when the watch_manager starts up, the in-memory table of watches
is populated properly. Tested.
Watches are scheduled on load. Unit tests needed.

The watches loaded from the watch store on load are now scheduled to run
and do send a message to run to the manager.

Tests are not yet done becasue I'm still having issues with the store
not properly starting because of a reliance on DETS. I need to figure
this out but don't have internet right now so I will once I land or I'll
come up with an intermediary solution.
lifeguard_watch_store is now safe to start multiple times

This gets the tests working because before the tests would attempt to
open up the same DETS table over and over and this would cause a
conflict.
Watches are rescheduled when they are run.

There is some improvement to be made here. Specifically, the watches
shouldn't be run if there is overlap. Also, when a watch is added, it
should reschedule it IF the time would be shorter.
Deleted watches are now unscheduled.
LIFEGUARD_LOG to set console debug level

Environmental variables are much more convenient for quickly setting a
debug log level than modifying a configuraiton file. Support that.
Bugs associated with creating a new watch.

We weren't properly creating the new in-memory metadata when there is a
new watch, so it was crashing there.
The estimated timestamp of when a watch will run next computed

This is computed now whenever the scheduling is done. In the future,
this will be used to show "will run next" ordering on the webpage.
Tabbing weirdness
Transient data is now appended to watches.

Transient data is a proplist of data that is appended to the watch model
and is "transient" in the sense that it should not be persisted.
Transient data is now passed down to watches API

This is used to show the next run timestamp on the watches list. Once I
get internet I'll look up how to make this a countdown.
JS manager added. Idle VM list is maintained.
Running watch tasks are sent to the JS VM
Fix issue where adding watches wasn't working from UI

The UI expected a "timer_at" to always be available, so that has to be
defaulted to null.

Additionally, I changed the semantics of set_watch a bit so that it
returns a watch with more metadata, and returns a watch in general,
since before it just returned 'ok' which isn't very useful.