Start on the symbolic access path analysis pass

This will be needed to implement the transfer analysis
Document some of the transfer analysis
WIP
Use the common argumentIndex implementation in llvm-base-types
Implement the transitive call function return case
Remove unused cabal dependencies
Fill out the implementation of the SAP analysis.

It still needs to implement the summary function interface,
but the basics are in place but untested.
Add a test suite for the symbolic access path analysis
Handle a transitive case that was missed before

Also adds documentation
Add an array test for the SAP analysis
Get rid of `safeIndex` and use `at` from the safe-failure package instead

Better argument order, more re-use
Implement the SummarizeModule interface for the results of SAP so far
Extend the SAP analysis to include summaries of *fields* that are finalized.

Includes a small test suite
Eliminate some code duplication
WIP Transfer analysis

Start including some of the SAP results and stub out the places
where it needs to be used.
Add another SAP test case
Distinguish between finalize and write annotations in SAP at the type level

This simplifies a few things and makes reasoning a bit easier.
Remove unused import
Add some helpers to the SAP analysis

These allow other passes to query the SAPSummary for AccessPaths
without having to pass through the generic Summary infrastructure.
The generic summaries provide useful information, but reconstructing
an AccessPath with them is difficult.
Use the SAP results in the Transfer analysis to identify more owned fields

This is only part of the required work - the WritePaths still need
to be consulted in the second part of the Transfer analysis.