Fix the noexectime specifier; it was broken in the Ragel conversion.
Replace get_first_time() and force_to_constraint() with set_initial_exectime().
set_initial_exectime() should properly handle the case where the minimum
job execution interval has not been satisfied by the first-choice
constraint selection.  Increment the minimum time to satisfy the time
interval requirement and reconstrain.
noexectime jobs must ignore the lasttime as well as the exectime.
Use clock_gettime() instead of time().
Refactor valid_day_of_month().  No functional change.
Use log_error() in rlimit.c.
Initial conversion to C++.  There's still a lot more things to be done.
Wire up support for RLIMIT_MSGQUEUE, RLIMIT_NICE, RLIMIT_RTTIME, and
RLIMIT_SIGPENDING in the crontab parser.
Use a heap-satisfying vector of unique_ptrs to cronentry_t rather than a
fully sorted single-linked list of cronentry_t.

On the way, compile as C++11 and change some code to be compliant.
Parse history file into an in-memory hash table before reading the crontab.

This approach is much more efficient than re-reading the history file
from disk once for every crontab job item.
Store constraint ranges in a vector rather than in a linked list.
Use std::unique_ptr for cronentry_t::limits.
Replace char * members with std::string in cronentry_t.
Remove free_cronentry().
Define a constructor for cronentry_t and track it with a unique_ptr in
crontab.rl::ParseCfgState.
Make rlimits into a class and clean up the implementation.
Make exec_and_fork and get_next_time member functions of cronentry_t.
Support Linux-specific rlimits: msgqueue, nice, rttime, rtprio, sigpending.
Update crontab(5) documentation.