сбор тиров и карты бакетов в sync topology

Ориентиры: !61 (merged), #63 (closed), #74

В рамках задачи нужно:

  • добавить получение tier names -> bucket counts (tiers: dict[str, int]) из системной таблицы тиров
  • добавить получение карты бакетов bucket_map через _pico_bucket(tier) для известных тиров
  • переиспользовать общие структуры Topology, EventBuckets, BucketRange, Bucket и parsing helpers
  • не дублировать async-модель топологии, а расширять тот же общий Topology
  • сохранить поведение, при котором ошибки получения bucket map для одного тира не ломают весь topology refresh
  • поддержать ситуацию, когда tiers еще не получены: в таком случае bucket map просто не обновляется

Отдельно нужно сразу учесть выводы из #74: _pico_bucket(tier) возвращает полный snapshot бакетов тира.

В этой задаче topology не должна менять состав пула.