be really paranoid about escaping any while loops
Merge branch 'master' of https://github.com/Pinoccio/library-gainspan-s2w
Initialize some variables in the class declaration

Previously, some variables were initialized in the constructor and some
were initialized by begin. This commit makes sure that the variables
that were initialized in the constructor now get their initial value in
the class declaration. The other variables are still initialized in
begin(), to make sure everything still works if begin() is called after
end() again.
Make sure that GSCore::serial and ::data_ready_pin get initialized

Previously, these were left uninitialized. This didn't show up as a
problem when GSCore was statically allocated into zero'd memory, but
when dynamically allocating a GSCore instance, it could fail to
initialize, thinking it was already initialized.
Improve the startup handling

When the data ready pin is available, we now wait for it to go high
during startup, as the datasheet dictates. When the pin is not
available, we just resort to polling the SPI port for data instead.
After this, we clear out any startup banner messages, like before.

This changes allows the begin method to be called very shortly after
powering up the gainspan module, even it hasn't printed its startup
banner yet.
Make sure the connection states are cleared on end()
Allow flagging an unrecoverable error

When 20 subsequent 0xff bytes are received, or a command times out, an
unrecoverable error is flagged. When this happens, the module stops
working and the caller is expected to reset or power cycle the board.
Fix indentation