Adds environment expansion to paths.
#24807 Hidden folders are no longer omitted by schema logic.
Previously, if there was a hidden folder (e.g. folder name starting with
a . character) in the schema, this simply would simply be ignored by the
folder creation. This pull requests stops that behaviour. This means
that we are subtly changing the behaviour of the folder creation logic
and anyone who has got hidden folders stored in the schema configuration
would suddenly have these carried across at folder creation time. In
that case, simply add an ignore pattern to the ignore_files file. Closes
#60.
[minor] #24865 Addressed code review feedback
[minor] Removed unused method platform.bundle.execute_hook_from()
#24981 [Minor] Added better error message for @include reference case.
Fix for #24987 - New format hook resolution with old-style defaults.
- Fixed hook resolution for old-style default_value's in the app manifest when used with a new-style hook format in the config
- Fixed case where app manifest specifies a new style hook and the config setting is set to 'default'
- Added unit tests for both cases
Closes #65
Create software_credits
Added QSplashScreen to sgtk default QT style sheet.
[minor] Now icon property is added by default to all command entries.
When a command is registered via engine.register_command(), the standard
icon keyword is now set by default to point at the icon that is normally
associated with the calling app, unless specifically overridden by the
register command parameters. Closes #67
[minor] Improved and simplified the default icon behavior.
#24916 - New Shotgun Logo in Std Toolkit Toolbar. 
Closes #62
#24916 Added more correct Shotgun Logo.
for #23095 allow environment variables in core_{os}.cfg files
see https://github.com/shotgunsoftware/tk-core/pull/32
for #23095 expand env variables in the core_{os}.cfg files in tank shell script
Tweaks to wording and content in the third party licenses declaration.
#24117 Added methods to hook base class to resolve local paths on disk.

This is a first step in a plan to future proof how file paths are being
resolved from publishes - by not having this logic in each hook we open
up for more advanced path resolution methods in the future. Instead of a
hard coded implementation (like now), this method could instead call out
to a core hook, or even have a more advanced scheme where for example
frameworks could register handlers (e.g. hello, I am the perforce
framework and I can resolve perforce:// urls) and this method could act
as a broker, dispatching the various path resolution calls to various
apps/engines/frameworks who would in turn contain the business logic how
to resolve them. This closes #68.
Added black list warning about the Hiero v0.2.3 engine's icon support.
#25241 Swapped init_engine() and _define_qt_base() call order.
With this change, init_engine() is called after _define_qt_base(),
making it easier for engines to do complex stuff in their init.
Previously, init would be different than other code because QT was
potentially not yet initialized. With this change, QT is fully
initialized before init is called and init therefore can be expected to
work in the same way as other callbacks and code with regard to QT.
#25277 Non-existant app level hooks are now ignored in inheritance chain
Previously, whenever a new-style hook was executed, it would (regardless
of whether the get_baseclass call was used or not) build up an
inheritance list and load each of the class objects in those files
(cached, so only loaded once). If a file didn't exist, an exception was
raised. This is normally not an issue since hooks specified in configs
certainly must exist and default hooks that come with apps also need to
exist. However, if the {engine_name} token is used in the manifest,
there is a case where an app does not provide a default hook for an
engine - beause it doesn't officially support it yet - and therefore an
exception was raised beucase that file was missing. 

The logic is now tweaked so that the code checks if the default app hook
exists and only then will it wedge it into the inheritance list. This
means that the get_baseclass call will return the main Hook class as
long as the app does not provide default support for that engine, and
when a version of the app which does support the new engine is released,
the get-baseclass call will start returning that default hook instead.
This transition should be harmless for already existing custom
implementations since they need to completely implement the required
hook interface anyway, and therefore will shadow the (new) default base
class implementation.
Revert "#25241 Swapped init_engine() and _define_qt_base() call order. With this change, init_engine() is called after _define_qt_base(), making it easier for engines to do complex stuff in their init. Previously, init would be different than other code because QT was potentially not yet initialized. With this change, QT is fully initialized before init is called and init therefore can be expected to work in the same way as other callbacks and code with regard to QT."

This reverts commit 0512ef9ac5300032fc6b0495a650f0839d86eec8.