A function that decides whether a given node can be shared.
Nothing means "don't share"; Just means "share". Nodes whose
result type fulfills (Sat ctx a) can be shared, which is why the
function returns a SatWit.

This function is not referentially transparent (hence the IO). However, it
is well-behaved in the sense that the worst thing that could happen is that
sharing is lost. It is not possible to get false sharing.