These fields may have to be shared in other data structures, such as a
variable declaration stack. In order to accomplish that, it’s necessary
to wrap the variable declarations in std::rc::Rc.
This replaces the unordered sets used for function and predicate
declarations with ordered sets. This is useful when these declarations
are supposed to be processed in a stable and meaningful order.