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.
Rename key.c to key.cpp

This removes the need for extern "C" when including key.h.
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.
Put wifi-specific code in a "wifi" module

This class now contains the wifi-specific stuff from Shell.cpp, which is
now enabled only when the wifi module is enabled.

This mostly just moves code, various parts of the code still contain
hardcoded references to WifiModule::instance that should really be
decoupled in a more general way.
Let WifiModule::enable find and pass BackpackInfo to WifiBackpack

Before, everything was implicit to the point where WifiBackpack assumed
it was the only backpack present and accessed Backpacks::info[0]
directly. Now, the WifiModule::enable function checks to see if the
proper backpack is present and passes the corresponding BackpackInfo
struct to WifiBackpack::setup.