Make PinoccioBackpack an abstract class

Previously, it defined empty constructors and loop and setup functions,
which aren't really needed. By making these pure virtual, the class
becomes abstract and the code becomes simpler.

This also adds a BackpackInfo* argument to setup, to match the method in
WifiBackpack.

Note that these functions weren't previously virtual yet, so if calling
loop() through a Backpack*, it would have only called the empty
Backpack::loop(), which probably isn't what was intended. Currently the
only implemented backpack is WifiBackpack, which is called directly from
WifiModule, but making these methods virtual now prevents surprises in
the future.
Rename PinoccioBackpack to Backpack and put it in the pinoccio namespace
Don't use USE_TLS outside HqInfo.cpp

This macro isn't defined in a header, so we can't use it outside of
HqInfo.cpp. This was broken since this check was introduced, but since
USE_TLS was undefined by default before that, this never got noticed so
far.
Stop using NCM for TCP connections to HQ

NCM seems to be a bit dodgy. Also, there is a bug in the Gainspan
firmware where you can never shorten the hostname that NCM uses (it
never writes a trailing zero, but writes into a buffer filled with
zeroes on factory reset), which we now circumvent.

To make sure that we properly reconnect if the TCP connection breaks for
whatever reason, we just check if we're still connected in every loop.
To prevent a race condition between the TCP connection and the timesync
(which happens in the onAssociate event handler), a flag is kept to
indicate if time sync ever happened succesfully.
Introduce HqHandler::use_tls constant

This is more meaningful than checking cacert_len everywhere.
Additionally, it allows it to be later changed if needed.
Reshuffle Shell.cpp

This shuffles the functions in Shell.cpp around to be slightly more
structured. More importantly, it puts the addFunction() calls near the
end of the file, removing the need to forward-declare each shell
function.

This commit only moves code, it does not change anything.
Make HqHandler::host and friends protected

Also adds getter methods to retrieve their values. This prepares for
making them changeable, without allowing arbitrary changes to be made.
Remove duplicate include
Allow changing the HQ address and port using hq.setaddress

e.g.
  hq.setaddress("pool.base.pinocc.io")
  hq.setaddress("192.168.1.123", 456)

Changing the hq address through scoutscript always disables TLS (can
only be re-enabled through a reboot). The port defaults to 22756 when
left out.
Allow disabling the HQ connection by setting an empty hq address

Running hq.setaddress("") disables the HQ connection on a lead scout.
Re-enable TLS

Now that NCM is no longer managing the TCP connection, hopefully TLS is
more stable.
Add virtual destructor to Backpack and subclasses

This allows deleting the classes without unexpected behaviour in the
future.
Add ModuleHandler::enable(Module*)

This allows enablinig a module when you already have a pointer to it,
skipping the name lookup.
Add ModuleHandler::find(const char*)

This allows finding a module by name, without loading it.
Use F() in ModuleHandler::enable