Use EthernetDHCP for non-blocking net startup

The arduino Ethernet libraries support DHCP now, but they're lame
because they block until DHCP is completed. A replacement library,
EthernetDHCP, allows us to use non-blocking DHCP negotiation. With
that our clock can run even if the network is not present.
NTP: improve repeat-request avoidance

We did a stupid timer trick to avoid requesting NTP multiple times
needlessly.  We start at :58 and disallow retriggers until :02.
Instead, add a separate state to handle auto requests and manual
requests with different setup parameters.  Add a guard-timer to
automatic requests which prevents them being triggered closer
than 15 minutes apart.
Import changes from Joe for the article