Puppet types and providers development part 4: caching resource properties to improve performance