Implement data_binding caching in node

This commit updates the node terminus such that it
stores its current data_bindings somewhere where the
custom hiera backend can find them.

This is being implemented for a few reasons:

- precompiling all hiera data is way faster than data bindings
- precompiling all hiera data is a useful debugging tool
- if we have debugging tools that perform precompiles, they should
use the same logic that is used by the Puppet master.

It also refactors some of the helper code to ensure that all
data lookup operations share as much code as possible:

  - node.find
  - compile_role
  - get_hiera_data