Overhauled saving document state.
Fixed ShellViewModel.SaveState issues.

Fixed an issue where a GeminiExport wouldn't be selected as the main export unless both its ContractName and ContractType were set.
Also fixed an issue where an empty ContractName is interpreted as set, which goes against the the documentation of ExportAttribute..
ShellViewModel.SaveState() relies on exports that inherit from ILayoutItem instead of GeminiExports.
Allowed saving documents that have a ExportAttribute.ContractName defined.