Add Selector

This will be used to make the DisplayPanel work with several different
paradigms. One will be a slide display tester, another will be the
actual projection...
Add ProtocolSelector, constructor, getCurrent

This won't just select slides--it'll handle ALL communication between
client and server.
Divorce ProtocolSelector from actual I/O

I'll let the DisplayPanel or other application layer code handle actual
I/O; this will simply parse messages and, if needed, return a Command to
send to the other side.
PS: Change current to a system of indices into the LHM
PS: Add processMessage
PS: Add canonicalizeIndexing

This will be useful immediately after incrementing currentIndex (which
will be our cycling mechanism).
PS: Add cycleDelay

Cycling will be handled by getCurrent to avoid the application having to
manage cycling for me. This will probably be the next commit.
Add cycling logic
PS.locateNextString: Detect if currentTag is null

This starts the cycle going when a slide has been added by forcing the
class to recognize this state and expose the first slide.
PS: Canonicalize after cycling

As an aside, it appears that "canonicalize" is one of my favorite words.
PS: Only update lastCycle if currentTag is not null