It might be cool if `tree_hash` could generate a non-pub function `tree_hash` which can't be called outside the crate where it is defined. This would be useful for `tree-states` where the BeaconState has pre-requisites on its tree hash implementation.