refactor: use TaskStorage restore path for deserialization
Replace the CachedDataItem-based restore path with direct TaskStorage
deserialization. This ensures serialization and deserialization use
consistent typed formats.
Key changes:
- Rename restore_task_data to restore_task_data_typed returning TaskStorage
- Rename restore_task_data_batch to restore_task_data_batch_typed
- Use task.restore_from(storage, category) instead of iterating items
- Update backing_storage trait with lookup_task_storage_* methods
- Update kv_backing_storage with batch_lookup_task_storage