Code cleanup.

Ensure that BudCollection#qualified_tabname and friends always returns a Symbol;
for some sub-classes (e.g., PushEachWithIndex), it was returning a String.
Merge branch 'master' into gc-proto-v1
Minor code cleanup.
Merge branch 'master' into gc-proto-v1
Code cleanup for creating TupleStruct instances.

For safety's sake, wrap access (read/write) of global state in a mutex. Unclear
whether this can actually cause a problem in practice (at least under MRI), but
seems like an obviously unsafe thing to do and is easy to avoid.
Merge branch 'master' into gc-proto-v1
Make TupleStruct#== consistent with Array#==

The previous implementation considered a TupleStruct to be equal to an Array
when the Array had more fields than the TupleStruct, but the common prefix of
fields had the same value. That is, we only compared the values of the fields in
the TupleStruct with the corresponding Array entries, and declarared success if
all such comparions yielded equality. That is fishy, but more importantly it is
inconsistent with TupleStruct#==(TupleStruct) and Array#==(Array).

At the same time, remove a useless begin/rescue block. Perhaps the intent was
that fetching a nonexistent Array index in Ruby would yield an exception? That
is not the behavior, so the begin/rescue doesn't seem to serve any useful
purpose.
Merge branch 'master' into gc-proto-v1
Simplify a test case slightly.
Merge branch 'master' into gc-proto-v1
Add TupleStruct#table_name, and switch to structural equality.

Two related changes to TupleStruct:

    (a) Implement TupleStruct#table_name, which returns the collection to which
        the given TupleStruct belongs. This will be useful for the upcoming
        support for fetching the source address from a channel tuple.

    (b) Use structural equality when comparing TupleStruct values. That is, two
        TupleStructs are considered equal if they have the same number of fields
        and the same field values; metadata (i.e., column names) is no longer
        considered.

Since (a) means that two TupleStructs for two tables with the same field names
but different table names will no longer share the same class, get rid of the
"$struct_classes" global lookup table.