Fix exception from calling updateUIFromServiceState() before the
handshake completed.
Remove possibility of ordering the same page multiple times pre-handshake.

- Check mOrderedPagesBeforeHandshake for the requested page in
  maybeOrderPage(), and if the page is there then there's no need to
  request it again.
Fix HandshakeNotCompleteExceptions by moving setAdapter() calls.

Calling setAdapter triggers a layout measure pass, and the measure
pass ends up calling getView(), which can call through to the service
to request the album art URL, which only works after the handshake
is complete.

Where setAdapater() calls were happening in the onCreate() or
onServiceConnected() methods, create a handshake callback and set the
adapter there.
Hash the player ID to generate a long identifier for it.

Converting the MAC address to a long does not work for players that do
not use the MAC address as their identifier.
Wrap the trackname TextView in a LinearLayout.

Without this, changing the contents of any other item in the layout will
cause the layout to reflow, which causes the scrolling marquee text to
reset.  Wrapping the trackname TextView in a LinearLayout means that the
TextView will not change size when then the layout is recalculated, and
the text continues to scroll.
Fix an IndexOutOfBoundsException.

Caused by opening a player's context menu and then the player
disconnects.
Fix inverted logic error showing playlist option menu items.
Ensure the context_menu is below the track_wrapper.
Prepare for release 1.2.3.
Merge branch 'release-1.2.3' into develop
Merge branch 'develop' into lint
Use list.isEmpty() instead of list.size() in a boolean context.