Fix backpack.list output

This would previously print the unique identifier bytes in decimal,
which does not properly show the identifier. Now, bytes are printed in
hexadecimal.
Remove Backack::dumpBackpacks

The Backpack class describes a single backpack, so it does not make
sense to dump a list of backpacks there. This method isn't currently
used either, so it's mostly old code anyway.
Add helper types for accessing big-endian integers from memory
Introduce a new Backpacks class

This class is responsible for keeping track of the various backpacks
connected to the scout. Right now, it only tracks their identifiers, but
this will be expanded to (parsed) EEPROM contents and Backpack object as
well later.

This removes the list of backpack identifiers from the PBBP class.
Instead, PBBP::enumerate() now gets a callback argument that is called
for every enumerated slave.
Add Backpacks::printPbbpErrror()

This simplifies printing PBBP errors.
Use a union and struct for backpack unique ids

Instead of passing a raw byte array and relying on all code to pick out
the right bytes, this uses a struct with the right layout for passing
around unique ids. This allows code to just pick out the field they want
and the compiler will sort out what bytes they need.

The actual unique_id type is a union containing this struct as well as a
raw byte array, so the byte array can be accessed as well (without
breaking strict pointer aliasing rules, like casting the struct to
(uint8_t*) would probably do).
Add BackpackInfo::getEeprom() and freeEeprom()
Remove some unneeded stuff from PinoccioBackpack

The printHex function was no longer used and the various attributes are
now stored in BackpackInfo instead of PinoccioBackpack.
Introduce printHexBuffer function in Shell.cpp

This code was embedded into backpackList before, but now has its own
function. It probably needs to be moved somewhere else to be more
reusable, but that's for later.
Remove unused variable
Allow reading (and listing) backpack names

References: #41
Add backpack.eeprom and backpack.detail bitlash functions

These print the backpack EEPROM contents and EEPROM header contents
respectively, when passed a backpack address. e.g.,:

> backpack.list
00: wifi (010001100000489E)

> backpack.eeprom(0)
01 40 3B 01 00 01 10 00
00 48 9E 01 77 69 66 E9
04 77 69 66 E9 01 0F 77
03 0E 70 67 ED 05 13 00
22 44 04 73 E4 01 10 AA
05 11 00 00 22 04 65 65
F0 01 07 BB 05 11 00 00
00 B3 3C

> backpack.detail(0)
Backpack name: wifi
Model number: 0x1
Board revision: 1.0
Serial number: 0x48
Backpack Bus Protocol version: 1.x
Backpack Bus firmware version: 1
EEPROM layout version: 1.x
EEPROM size: 64 bytes
EEPROM used: 59 bytes

Closes #41
Don't include PBBP-protocol.h in PBBP.h

Including it from PBBP.cpp instead keeps those defines private and is
possible since UNIQUE_ID_LENGTH is no longer used outside of PBBP.cpp.
Add const specifiers to Pbbe methods
Restructure backpack EEPROM handling

Previously, there was some code in Backpacks::getEeprom() that fetched
the EEPROM contents. However, to do so it needed to know bits about the
EEPROM layout to know where the EEPROM size was stored. This code is now
moved inside the Pbbe class where it makes more sense (at the expense of
introducing a dependency from Pbbe onto PBBP.

Furthermore, instead of passing buffers and lengths everywhere, wrap
those in an Eeprom struct. Also slightly change the way the EEPROM
length is read and the EEPROM bytes are indexed.