Customise the song list views depending on filtering.

Create a custom view for SqueezerSongListActivity when viewing all the
songs on a single album.  The view shows the album information
(artwork, name, artist, year) in a fixed view at the top of the list.
The tracks are shown (without the artwork) in a ListView below.

Menu items to play the album, add it to the current playlist, or
browse artists on the album are moved from the options menu to a
custom context menu shown in the header.

Refactor SqueezerSongView in to two classes.  Keep the general
behaviour and context menu in SqueezerSongView, and create
SongViewWithArt that handles setting album artwork.  This means that
SqueezerSongView can inherit from SqueezerPlaylistItemView instead of
SqueezerAlbumArtView.

In addition to hiding the album artwork, SqueezerSongView adjusts the
information shown in the second line of "details" information.  When
viewing an album the album name does not need to be repeated, and, if
it's not a compilation, the artist name can be removed.  Instead, show
the track number and the duration.  Adjust the tags requested for
songs to return this information.

To do this, introduce two general mechanisms for configuring
SqueezerBaseItemView.  The first is via a new
SqueezerBaseItemView.ViewParams enum.  Subclasses can set this to
specify the features that that item view should have -- an icon, a
second line for details, and a context button -- both when the view
has data, and when it's waiting for data to be loaded in to it.

Introducing this meant that the custom layouts icon_large_row_layout,
icon_one_line, and icon_two_line could be retired, as they can be
implemented with this new method.  This also means that the single
item view layout is consistent across different views, and errors
(inconsistent padding, etc) can be avoided.

The second mechanism is similar, except it's an enum of "Details" to
show in the second row of text.  Classes and subclasses can set this,
and the bindView method will include the relevant details in the
correct order.

This pushes a lot of common code in to SqueezerBaseItemView and
simplifies many of the itemlists/*View.java files -- in most cases
they now set the details that should be included and a binding with
small custom bindView() methods.

This highlighted an issue with searching, as the search results only
include the album name and ID, with no other metadata.  So change the
service's search() method to instead issue 4 parallel requests to the
server for artists, albums, genres, and songs that match the search
text.

This also means that album and song artwork can be included in the
search results list, so do that.

These changes also made it possible to adjust SqueezerAlbumListView
and SqueezerArtistListView to show a header displaying what they
showing if filters were in effect ("All songs by <foo>", "All albums
in genre <x>") and so on, so do that.

Add a dependency on the Guava library for its support for easy string
joining and some value checking methods.
Merge branch 'actionbar' into custom-album-view
Merge branch 'actionbar' into custom-album-view
Put back GENRE enum, deleted in error.
Fix typo in comment.
Update playlist code with other itemlist code.

Use the new mechanisms to show album artwork, track duration, album, and
artist.  Remove the special formatting for the details text.
Show additional details in search results.

For songs show the duration, album, and artist.  For albums show the artist
and year.
Merge branch 'actionbar' into custom-album-view

* actionbar:
  Fix a bug where searches from the search activity did not work.

Conflicts:
	src/uk/org/ngo/squeezer/SqueezerSearchActivity.java
Merge branch 'actionbar' into custom-album-view

* actionbar:
  Enable voice searches.
Merge branch 'actionbar' into custom-album-view

* actionbar:
  Fix BadTokenExceptions with VolumePanel.
  Include connection state when determining which power menu items to show.
  Fix a bug where all option menu items were being shown.
Correctly take account of padding when calculating the view size.

Always use whichever dimension is smaller as the final size.
Replace non-functional "Download" option menu item with a context menu.

The "Download" option menu item did nothing.  Remove it, and add a context
menu to now_playing_fragment_full.xml.  Add the Download menu item here.

As there's now an available context menu, use it to also show menu options
for viewing songs on the album, albums by the artist, and songs by the artist.
This replaces touching the track, album, and artist name views, which were
small touch targets.

Trying to fit the context menu in to the existing LinearLayout created many
nested views, so switch to using a RelativeLayout for
now_playing_fragment_full.xml.
Merge branch 'actionbar' into custom-album-view

* actionbar:
  Replace non-functional "Download" option menu item with a context menu.
  Correctly take account of padding when calculating the view size.

Conflicts:
	src/uk/org/ngo/squeezer/NowPlayingFragment.java
	src/uk/org/ngo/squeezer/widgets/SquareImageView.java
Include the player name in the "turn on/off" menu items.
Use a non-deprecated method to fetch the display size.
Set the album's layout_height to fil_parent.

This allows the min() calculation in SquareImageView to do the right thing
if the album artwork is shorter than it is wide.
Change "Volume" in the menu to "Change volume".
Update to Gradle 1.8.
Use Guava 15.0.
Merge branch 'actionbar' into custom-album-view

* actionbar:
  Update to Gradle 1.8.
  Change "Volume" in the menu to "Change volume".
  Set the album's layout_height to fil_parent.
  Use a non-deprecated method to fetch the display size.
  Include the player name in the "turn on/off" menu items.