Use immutable upoint data type in several places

The idea here is that every Boolean Function data type should actually
implement it's 'restrict' function without worrying about whether the
variables in the point are the same data type. Underneath it all, they
only need to implement the urestrict method. Also, it makes caching the
restriction value easier.