Convert pdf extension to a service provider

 - Define an 'htmltopdf' provider contract
 - Use TCPDF 6.0.088 internal HTML handling
 - Implement in Publisher and Codex modules
 - Add tecnick.com/tcpdf requirement to main composer.json
 - add isAvailable() method to Provider to simplify conditional flows based on availability of a real service provider (i.e. suppress links when no provider is available.)

Eventually, this extension should be moved out of core, and into a composer installable module repository. The tcpdf package could then be removed from xoops/core, and only installed when needed.