catalog-rows: keep failures per row and make row saves all-or-nothing
- CatalogRowsRefresher: a row deleted mid-run is left out; any other per-row failure marks the row stale (UNEXPECTED) and the run goes on; a title storage would refuse is dropped, not the whole row. - A last attempt time later than now counts as due, and stored future times are moved back to now before the next attempt is written. - ensureCatalogRows inserts defaults turned off once 20 rows are shown; a TMDB catalog save stores unticked lists off in the same transaction as the ticks, so a TOO_MANY refusal stores nothing. - PUT /settings saves catalog switches and the row list in one transaction (HomeSettingsStore.saveRows, LibraryStore.saveHomeRows); an unknown catalog row is named in details.catalogRowId. - Phone page: an unsaved row list drops catalog rows the TV no longer has, on load and when a save is refused for one.