#25686 Adjusted the logging in the tank command to not break long words.
For #25692 - Improved template parsing to be more robust.
Template parsing now handles more ambiguous cases where one or more static tokens may also appear in a key value.  If a value is ambiguous this will now get reported correctly in the error.
Closes #84
For #25587 - Spaces in Windows PC & Python paths are now supported.
Spaces are now supported in paths for Pipeline Configurations on Windows when using the latest version of the tank.bat file.  Additionally, Python can now be installed into a path with spaces in (e.g. C:\Program Files) if needed.
Closes #83.
For #25692 - Improved template parsing to be more robust.
Template parsing now handles more ambiguous cases where one or more static tokens may also appear in a key value.  If a value is ambiguous this will now get reported correctly in the error.
Closes #84
Merge branch 'master' of ssh://github.com/shotgunsoftware/tk-core
#25236 Added support for shared framework instances.

This feature is enabled by setting `shared: true` in the framework's
info.yml. By default, each app will create instances of all the
frameworks it needs. The paradigm is that of a static library, where
each app will run independent *instances* of all its frameworks for
encapsulation. If one app does crazy manipulation of its frameworks,
this will not affect any other apps since they all run their own
instances.

However, for memory intensive or slow to set up frameworks, it may be
beneficial to have a single shared framework instead. This flag
indicates to the system that a framework is of that kind.

This commit closes #66 from Psyop. Thanks @agibli!
#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.

This commit also removes the unused internal method
pipeline_config.get_all_data_roots().

Closes #82.
Merge branch 'master' into tank_command_misc_improvements