Maintains a dictionary of all declarations which can be looked up
to create cross references. Names are fully scoped.
linker is an instance that implements the Linker interface and is
used to generate the links from declarations.
store the table of contents into a file, such that it can be used later when cross referencing