Make read of SleepHandler::lastOverflow atomic

Since it is a multi-byte value and is written from an ISR, it would be
possible that the ISR triggers halfway through a read, causing the read
to be garbled. This only occured when actually reading the uptime
exactly the moment the timer overflowed (every 19 hours), but it needs
to be fixed nonetheless.
Fix coding style inconsistencies
Fix newline handling on serial prompt

Sending just a \r on enter, as seems to be common in serial console
programs, was no longer working. This was broken when we switched from
letting bitlash handle the serial input to handling it ourselves.

Previously, bitlash just handled commands whenever it saw a \r or \n,
which we mimic now. However when sending a \r\n, this would in extranous
newlines. This did not happen in bitlash, since it completely clears any
pending input after completing a command. Since we don't (want to) mimic
that input clearing, we have to take a bit of extra care to properly
handle \r\n instead.

This commit makes sure that \r\n, \r or \n works as a line separator
now.
Simplify updating outWait in Shell

Before, it was set to true and false at relevant moments. Now, it just
gets set to true iff anything is buffered in serialIncoming, which makes
things a bit more simple, especially with the upcoming changes.
Handle backspace on the serial console

Previously, this was handled by bitlash, but now we have to handle it
ourselves.
On serial, make arrow up reload the previous command
Don't bother running an empty command from Serial

This saves a bit of trouble when pressing enter without entering a
command. Additionally, it prevents clearing out the previous command
(which can be recalled by pressing arrow up) when just pressing enter.
Add Shell.addFunction wrapper around addBitlashFunction
Add module support

A Module is a class the defines a bunch of functionality that can be
dynamically enabled at runtime. The code is already present in Flash,
but the relevant setup steps (in particular, big memory allocations)
have not been performed and the associated bitlash function are not
registered yet until the module is enabled.

Each module should define a single instance of itself (and make its
constructor private to prevent creating further instances), which will
automatically register itself into the linked list of available modules
at startup (through the Module class constructor). This means there is
no need to keep a central list of available modules, and any modules
that live in external Arduino libraries are automatically included too.

The new module-related classes are put into the new "pinoccio"
namespace, to prevent potential naming conflicts with other code. The
rest of the code should be converted to use this namespace later, but
using the namespace for this new code right away probably makes things
easier.

Disabling a module is not currently supported, mainly because bitlash
has no way to un-register functions.
Rename PinoccioScoutHandler to ScoutHandler and put it in the pinoccio namespace
add Scout.reboot() in one place
Remove unused includes
Rename WiFiBackpack to WifiBackpack
Put WifiBackpack in the pinoccio namespace
Fix wrong types in key.c

There were incorrect typings, that didn't cause any errors in the C
compiler. When switching to the C++ compiler next, these will throw
errors, so best to fix them now.
a simple Shell.eval() function that wraps/runs any bitlash, untested
Rename key.c to key.cpp

This removes the need for extern "C" when including key.h.
allow eval to take just one arg too
Don't put extern "C" around the memdebug.h include

The memdebug.h file itself already has a (conditional) extern "C" line,
so no need to put it here as well.
add a vararg based friendly Shell.command() convenience thing for happiness