Refactor: Lazily instantiate ProvenanceInformation objects
As a rule, throughout the codebase we should not be using internal ProvenanceInformation objects in our APIs, but rather Node objects.
This is because ProvenanceInformation is generated on the fly from a Node object, and it is needlessly expensive to instantiate one before it is absolutely needed.
This patch unilaterally fixes the codebase to pass provenance_node
Node objects around as arguments rather than provenance ProvenanceInformation
objects.