feat: add `AlphaShareBuilder`

This PR adds functions for creating maximally shared terms from
maximally shared terms. It is more efficient than creating an
expression and then invoking `shareCommon`. We are going to use these
functions for implementing the symbolic simulation primitives.
4 files changed