Major refactor to better match the structure of the ELF linker.
- Split out relocation processing into scanRelocations
- Split out synthetic sections into their own classes.
This is a major refactor but is mostly just moving code around. The
only non-trivial change is that to the way in which SectionSymbols
are generated. In order output section symbols we now track the
output section from each input section, and each output section can
have an options SectionSymbol.
nit: OutputSectionSymbol* -> OutputSectionSymbol *