MPD.java: Check for a null connection in getAllAlbums().

This fixes Crashlytics issue #10.
MPDStatus: Change state type to int.

State value can no longer be null, string doesn't make sense anymore. This
commit also adds a convenience method to boolean query the against the
current state.
dmix: MPDStatus (as returned from MPD) can no longer be null.

MPDStatus, as returned from MPD().getStatus() used to double as a status
update method. This caused all callers to require null checking and error
handling, in the case that a status refresh was required. This commit
uses StatusMontior callbacks to keep completely updated, from connection
to updates.

This also adds the method MPDStatus().isValid() to check status object
validity, since this was, typically, done as a null check when previously
required.
MPDStatus: Calculate the elapsed time since the last status update, if playing.

Our status monitor only updates on actual status changes. If there was a status
update to playing, but no subsequent update, the elapsed time would stay static.

This makes status updating prior to elapsed time updates unnecessary if an
updated elapsed time is required but nothing else, if playing.
UpdateTrackInfo: Fix for a more strict warning set.
UpdateTrackInfo: More correct timing for forcing refresh calls.
AlbumCoverManager: Add a workaround for a CoverManager bug.

CoverManager will very rarely (1 out of ~250-300 times) distribute a null
album cover. This works around that behaviour.
JMPDComm: Only allow idle calls for subsystems we support.
MPDPlaylist: Warning cleanup.
CommandQueue: Remove command queue from MPDConnection.

Remove CommandQueue from MPDConnection. Previously if two command queues were
added together at the same time they would get merged together. This makes
it more thread safe and will further clean up MPDConnection.
CommandQueue: If command is singular send a singular command.
CommandQueue: Throw IllegalStateExeception on empty CommandQueue send.
MPDPlaylist: Replace the list in one step.
MusicList: Clean up warnings.
MPDPlaylist: Simplify playlist refreshing.

Add and remove from the playlist itself. Add and remove changes as they
are received. Do it in a synchronized manner.
MusicList: Synchronize when iterating or using as a map pair.

According to {@code Collections.synchronizedList()}, "It is imperative that the
user manually synchronize on the returned list when iterating over it", so we
need to synchronize in that case.

We should also synchronize when using the map and the list as a pair, to
prevent us from getting unlucky in the case that the map gets modified by a
different thread at the same time.
MusicList: When replacing a list, map the song ids.
MPDPlaylist: Refresh the playlist on connection.

This should fix #558.
MPDPlaylist: Don't refresh after command calls.

Calling refresh() after command calls is unnecessary and duplicative. Wait for
the status monitor to callback.
MPDPlaylist: Add a MPDStatus parameter to refresh().