feat(doc-processor): add dependency injection

This will allow us to pass around singletons between the processors, such
as a list of links that have been found.
refact(doc-renderer): convert to a doc processor
feat(doc-processor): provide better marker processors

This allows processors to insert themselves into the pipeline more
generically at a particular phase, without having to know the exact name
of the processor that is processing that phase.
feat(doc-processor): support async processors

Processors can now be synchronous or asynchronous.
If they are sync then they should return a new docs array or undefined.
If they are async then they should return a promise that will resolve to
undefined or an array of docs.
docs(README): tweak
feat(code-name): add partial name parsing