Tidy up HTML errors in INDEX.PHP

Without any "widgets" selected, INDEX.PHP (i.e. the "dashboard")
produces 230+ HTML errors, so:

Remove the "closehead" php variable
Close INPUT, BR and IMG tags
Add ALT parameter to IMG tags
Add CDATA sections to SCRIPT tags
Heading tags cannot contain DIV tags
Cleanup code handling 25 day dyndns update

The code that checks if an IP has not changed for 25 days has out-of-date comments and uses "25" in multiple places and the magic number for 25 days in seconds. Clean this up so that "25" is set once in a variable and used everywhere else for logging and calculating seconds. This makes the code easier to read and maintain, particularly if in future the max age needs to be changed for some/all providers.
Merge pull request #433 from phil-davis/master

Cleanup code handling 25 day dyndns update
Add onchange tag to checkbox too
Add common DynDNS constants and code

to system.inc to remove code duplication
Use common code and constants from services.inc

Reduce code duplication
Use common code and constants from services.inc

to reduce code duplication
Use common code and constants from services.inc

to reduce code duplication
Remove leading spaces from DYNDNS_PROVIDER_DESCRIPTIONS

Remove leading spaces to make the string consistent.
Merge pull request #435 from phil-davis/master

Put common DynDNS code and constants into services.inc
Fix indent and whitespaces
Encrypt backup after rrd data is added, it fixes #2836
Add DynDNS No-IP Free account support
Add DynDNS No-IP Free account support

The free No-IP account requires the IP address to be changed within every 30 days. If there is no change, the "last updated" date at No-IP does not get updated and the account lapses.
This change implements a double-update when the cache age reaches 25 days, or the user does "Save & Force Update" on the GUI. It updates the IP to a dummy address (192.168.1.1) and then 10 seconds later puts it back the way it was. After this process, the "last updated" date on the No-IP site updates.
To get this behavious, users have to select "No-IP (free)" as their DynDNS service type.
Make sure captiveportal section of config is an array, reported on ticket #2838
Ignore swap partitions when looking for external config file
Fix indent and whitespaces
Create rules for grouped interfaces before regular ones. Fixes #2837
Add VPNs and PPPoE rules before regular ones. Fixes #2837
Show cert start/end dates in list.