match.c: Add support for fnmatch based patterns (not yet used)
matchtest: Add support and tests for fnmatch matches
multilog: Add support for fnmatch patterns
Merge pull request #14 from snakpak/fix-year-wrap

Fix reporting of the 1900 years beyond 2147483647.
multilog: only "newline" what wasn't already overwritten
multilog: Move a couple of hot globals into the doit function
byte*: Wrap standard C library functions, they're faster
str.h: Remove unused prototypes
buffer: Add a buffer_copyline function, to copy everything up to a specified character
tai64n: Use buffer_copyline to speed up data copying

Cuts time spent in the program by half.
tai64nlocal: Use buffer_copyline to copy out remainder of line

This cuts CPU time used by tai64nlocal by 2-4x depending on line length
multilog: Break timestamp generation out of line reading loop
buffer: Add buffer_gets line reading function
multilog: Read/write whole lines at a time
tai64nlocal: Format all the numbers, then output

This further improves the performance of tai64nlocal by a bit
Add CHANGES note about optimizations
str: Use standard library replacements for str_diff and str_len

Replacing str_chr and str_start efficiently is harder due to the
differing calling conventions -- no easy way to do it without scanning
the string twice for the failure case, in which case there is no gain.
disable setsid per-service with a ./no-setsid file.

Before this change, each service always ran in a separate process group via setsid(2). For users that need the classic daemontools behavior instead, the existence of a file ./no-setsid in a service directory will disable this.
when using setsid, signal the entire process group.

Prior to this change, only the process leader of a service would be signalled by svc(8). For multiprocess services, this meant that sending SIGINT or SIGTERM would typically orphan processes. Better behavior: always signal the entire process group when a service is using setsid.
ensure clean service shutdown and clean ^C, ^Z behavior.

When supervise(8) itself receives certain signals, they should be propagated to the service.

When supervise(8) receives SIGTERM or SIGINT, propagate this to the supervised process by behaving as if `svc -dx` had been called. SIGTERM occurs during system shutdown. SIGINT can occur when svscan(8) is running in terminal foreground and gets ^C. In both cases, not propagating the signal to a setsid service will result in orphans that continue to run.

When supervise(8) receives SIGTSTOP, for example because svscan(8) is running in terminal foreground and gets ^Z, behave as if `svc -p` had been called. Similarly, when supervise(8) receives SIGCONT, behave as if `svc -c` had been called. This ensures that setsid services stop and resume when running in foreground.