Make BitVector#sizeLessThan remember upper and lower bounds on size.

This implementation only updates bounds on the top-level bit vector
that `sizeLessThan` is called on. I tested an implementation that
passes a bounds updating continuation to `go` but it performed worse
in the unit tests.

Also, note that `Append.size` makes the bounds tight for that node.
Further, `sizeLessThan` calls `size` on the left side of append
nodes, resulting in many tree nodes getting tight bounds anyway.

Review by @pchiusano