Let leadSignal accept a const String&

Every caller had a StringBuffer object that was converted to a char*, so
might a well pass the actual object.

Inside leadSignal, the String is now passed to the wifi client print
method instead of write. This means that the length stored in the
String object is used, saving a strlen call.
Add ConstString and ConstBuf classes

These classes make it easier to pass char* around, without forcing the
complete string copy that would be needed to turn them in to regular
String objects.
fix leadsignal
Add StringBuffer::concat version for uint8_t*
fix string
Pass a ConstBuf& instead of char* where possible

Previously, char* were passed, even when they were not guaranteed to be
nul-terminated (in particular, packets received over the mesh were not
guaranteed to be nul-terminated). Now, a ConstBuf object is passed,
which includes the length, preventing out-of-bounds reads.

This removes most of the c_str() calls from ScoutHandler. The ones
remaining are for interfacing with external things, like bitlash, js0n
and sprintf, which we cannot change to accept anything else.
Remove debug print from StringBuffer
Allow passing a ConstBuf to StringBuffer::appendJsonString

Indirectly, this also allows passing a char*, String& and StringBuffer&,
so the original char* version can be removed.
Fix if inside appendJsonString

There was a stray semicolon, that caused appendJsonString to only
reserve space and never actually copy bytes.
Fix escaping in appendJsonString

Previously, appendJsonString kept a char *out, pointing to the next
character to write that was valid throughout the entire function.
However, when characters needed to be escaped, usually the reserved
buffer would be too small and a second reallocation was needed. This
could change the address of the buffer, making the out pointer invalid.

To fix this, reset the out pointer at the start of each try and keep an
explicit count of bytes written so we know where to point it.
Don't send debug output to bitlash in ScoutHandler::announce

If that function is called from inside a bitlash command coming from HQ
(e.g. when a led report is triggered when running "led.red"), the debug
output would end up inside the command reply.
Apply JSON escaping to HQ command output on lead scouts

Previously, the output from field scouts was escaped, but output from
the lead scout itself was just passed on unescaped.