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.

Squashed commit of the following:

commit c64519a94363a03cde2d2c178ae93e2b079a9c16
Author: Michael Pilquist <mpilquist@gmail.com>
Date:   Mon Mar 10 12:40:42 2014 -0400

    Fix failing test

commit 7b7320bbf145239afee986b934d750ce9451eaba
Author: Paul Chiusano <paul.chiusano@gmail.com>
Date:   Mon Mar 10 10:51:24 2014 -0400

    Beefed up tests for sizeLess/GreaterThan, including adding some concurrency; concurrency test is currently failing

commit fc2eba1488d1f657a46b345808b88b37e4de6f87
Author: Michael Pilquist <mpilquist@gmail.com>
Date:   Fri Mar 7 20:43:43 2014 -0500

    Take advantage of size bounds in append case

commit 628fb472af308a90e5ccf5b4c3386eb76b04f609
Author: Michael Pilquist <mpilquist@gmail.com>
Date:   Fri Mar 7 17:43:33 2014 -0500

    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.