Take an initial stab at a "chunked" data loader.

This loader is for loading content from a single URL but spreading it out
over N rows, with a fixed row size. So, to create a vertical scrolling
grid. The top row is for shortcuts, search keys, and eventually for a dummy
item that loads the filters screen.
Initial filters screen implementation.

Allow the user to select a type, and then filters and sorts. Everything is
loaded dynamically (and reloaded when the type changes). The grid asks the
filter options for the current URL, but it doesn't yet reload when the filters
change.
Reload the grid after setting filters.
Fix reloading of chunked grid.
Hack to force up behavior on filtered grids.
Sloppy solution for filtered grids with no items.
Fix breadcrumbs and context for filtered grids.
Remember the last used filter options for each section.
Switch to mixed-aspect-ratio grids.

And all of the attendant headaches. Oodles of crashes later, it seems that you
can't mark a row as invisible if you might want to make it visible again later.

The home screen and search screens use various dimensions in their rows.
Filtered grids also use the mixed grid to show squares in the filter row
and appropriate dimensions in the rest of the rows.
Fix up row names on chunked grid.
Add a couple of filter prefs.

Add a preference for whether to use the new filtered browsing instead of the
old grid. The new approach is the default.

Add a preference for whether to remember the last used filters for each
section, defaulting to yes.
Show a (lame) help screen about filters on first section launch.

The screen itself could use some love, but this should improve discoverability
of the special row at the top. The filter row is also initially focused the
first time a filtered section is launched, but continues to be hidden off the
top of the screen after that.
Allow chunked grids to be used in more places.

Use chunked grids in more than just filtered sections. For example, pulling
up On Deck will now use a chunked grid instead of a poster screen.
Switch to broadcast for advertiser socket.
Fix user-visible myPlex references.
Improve setting tokens on servers.

Don't blindly set our super token on servers. Only set the super token on
servers from myPlex that don't have their own token. Also, remember tokens
for servers so that we can communicate with them immediately on startup,
without having to wait for the myPlex response that has the tokens.
Further improve default token handling.
Support for lite servers.

All of the other clients allow servers to have multiple connections, and then
routinely test those connections to select an active connection. This isn't
quite that, but it's a first step. All of the code that assumes a server has
a single URL is still there. Internally, the server object can have multiple
connections and can test their connections and notify a listener when it finds
an active connection.

That new logic is used to create server objects from (my)Plex XML, and add
each local address as a connection. The home screen data loader then asks
the server to test its connections and kicks off the rest of the server
requests once a valid connection is found.

Though it's still trickier than that, thanks to the grid screen's propensity
to crash when row visibility or focus changes. So we jump through some hoops
to try to avoid hiding rows until we know they're never going to be populated.
Only mention the trial on the first run screen when in Trial mode.

No need to show it for grandfathered users setting up a new Roku, or exempt
users.
Refresh theme, move to "Plex gray".

Change the background color to #1f1f1f and tweak the rest of the colors to
work with that. Update all of the affected images. And tweak the transcoded
image sizes to match what the new grid screens are expecting.