#25664 Better detection of storages with Null values

This change ensures that local storage and local project storage paths are guaranteed to be non-null. In the case where a current os storage is null (because it wasn't originally set up to support that platform), an exception is raised. 

This affects the behaviour of `pipeline_config.get_data_roots()` and `pipeline_config.get_local_storage_roots()` which will now raise a TankError whenever the detect a null value. This was not previously the case, however it seems all the code assumes that values exist, so this should hopefully make things clearer, both in the code and for users.

Also removes the unused internal method `pipeline_config.get_all_data_roots()`.
i think this is ok. For every dynamic folder in the schema, there is a shot folder and a shot.yml file that contains its configuration - so there is actually both a folder and a file.