script: allow CScriptIDs to be created from CScripts

This allows for a reversal of the current behavior.

This:
CScript foo;
CScriptID bar(foo.GetID());

Becomes:
CScript foo;
CScriptID bar(foo);

This way, CScript is no longer dependent on CScriptID or Hash();
script: remove all uses of CScript::GetID()
script: remove CScriptID::GetID()
script: add base class for serializing core structures for scripts
script: add derived classes for core structures that are written to scripts
script: use CScriptBinaryData for all core structures that are added to scripts
script: remove old methods of writing core structures
script: re-implement script-to-string logic to avoid the core dependency
script: add a slew of includes all around before removing some from script.h

Lots of files ended up with indirect includes from script.h.
script: drop core includes