Correctly manage the service over the activity lifecycle.

Per http://developer.android.com/guide/components/bound-services.html#Binding:

"Note: You should usually not bind and unbind during your activity's
onResume() and onPause(), because these callbacks occur at every lifecycle
transition and you should keep the processing that occurs at these
transitions to a minimum. Also, if multiple activities in your application
bind to the same service and there is a transition between two of those
activities, the service may be destroyed and recreated as the current
activity unbinds (during pause) before the next one binds (during resume)."
Fix NPE, as shuffleButton and repeatButton are only non-null when full height.
Work in progress, using Fragments for lists.

First cut at implementing a SongListFragment that can be hosted in an
activity to show songs according to different criteria.

Implement AlbumListActivity to host this, showing all songs from a given
album.

Main change is to provide an OrderPages interface that both activities and
fragments can implement.  This lets the adapter receive an object that
implements this interface, and not need to care if it's an activity or a
fragment.  The adapter then uses this, instead of calling the itemView's
getActivity() method.

Known problems:

* Context menu for list items in the fragment doesn't work.
* List items have additional padding because it's falling back to a generic
  view.
* Lots of duplication of existing code that must be refactored.
* OrderPages interface probably contains too many methods.