Add SerialForward.ino example, for simple interactive use
Handle disconnects in GSCore::processDisconnect

This makes sure the same code runs, regardless of the cause for the
disconnect. In particular, this makes sure that when the NCM connection
is closed due to a SSL failure, ncm_auto_cid is properly updated.
Properly update association state on disassociate

There was a typo that kept the associate state to associated after
disassociation.
Rename processDeassociation to processDisassociation
Handle new connections in the new processConnect method

This removes some duplicate code and makes sure that all new connections
pass through a single place.
In the NCM example, allow running one-off

Before, you would run once to save the config to flash and after that
use the config from flash, but for quick testing just setting the config
but not saving to flash is easier.
Support some callbacks on important events

This does require users of the library to regularly call the loop()
function, since events cannot always be directly processed (e.g., when
halfway through another command for example).
Fire onAssociate after an explicit association as well
Fix infinite loop in setAutoConnectClient

Before, the IPAddress object passed was converted to a string in a
uint8_t[] and another version of setAutoConnectClient was called passing
in the buffer. However, that other versions accepted a char* instead of
a uint8_t* and the compiler apparently considered casting the uint8_t[]
to an IPAddress easier than casting it to char*, causing the method to
call itself repeatedly.
Add GSModule::setDns
Improve order of running events

This ensure that the disconnect event is ran before disconnect and
associate before connect.
Improve response parsing

Previously, when using a small buffer, it could happen that a
non-response line was interpreted as a response if its first characters
resembled a response. Now, lines that are truncated are explicitely
marked to be skipped, so they are not further processed at all.
Add GSCore::parseIpAddress
Add GSModule::dnsLookup
Fix GSModule::loadProfile and setDefaultProfile

These methods sent the wrong commands, probably due to a copy-paste
error.
Swap interval and timeout parameters to GSModule::timeSync

It's more likely that you want to change the interval then the timeout,
so better move that to the front a bit.
Make the time sync interval 32-bits

It seems the hardware accepts values above 64k, and it makes sense
to use an interval of more than 64k seconds (18 hours).
Immediately mark evens as done

Before, all events would be marked as done at the end of GSCore::loop(),
but when an event handler would trigger a new event, that one would be
silently dropped. By marking each event as done separately and before
calling the event handler, no events should be dropped.
Add GSModule::setParam and GSModule::setNcmParam
Make debug output more consistent

Now, all line output starts with >>= or <<= for literal lines, and >>| or
<<| for messages describing a line and >= or <= for single bytes. As
an added advantage, this prevents line debug output from looking like a
prompt and confusing the chrome application.