modules/services/networking/dhcpcd.nix: add "extraConfig" option

This option allows administrators to add verbatim text to the generated
config file. I use this feature, for instance, to disable the default
route normally added by dhcpcd for certain interfaces.
apcupsd-service: add services.apcupsd.hooks option

Each attribute in this option should name an apcupsd event and the
string value it contains will be executed in a shell in response to that
event. See "man apccontrol" for the list of events and what they
represent.

Now it is easy to hook into the apcupsd event system:

  services.apcupsd.hooks = {
    onbattery  = ''# shell commands to run when the onbattery event is emitted'';
    doshutdown = ''# shell commands to notify that the computer is shutting down'';
  };
apcupsd-service: create missing /run/apcupsd/ directory

apcupsd complains about it when it is starting the shutdown procedure.
apcupsd-service: put UPS in hibernate mode when shutting down

This adds a special systemd service that calls "apcupsd --killpower"
(put UPS in hibernate mode) just before shutting down the system.
Without this the UPS will stay on until the battery is completely empty.
apcupsd-service: workaround for "waiting for stop job"

systemd always ends up "waiting for stop job" on apcupsd when apcupsd
started the shutdown procedure. This is weird, because in the journal
one can clearly see that apcupsd has received the SIGTERM signals and
has already quit (or so it seems). This adds a workaround so we don't
wait in the full 90 seconds (default) for systemd to really kill it.