x3270 3.3.12ga11

Closes #17047.

Signed-off-by: Adam Vandenberg <flangy@gmail.com>
Beef up deps tests
Clean up Tab creation
Move option comparison into BuildOptions
Options can be used interchangeably with Strings

We want to be able to use Option objects in place of strings and have
this be transparent. Defining to_str means that methods like
Kernel#system and Kernel#exec will be able to perform an implicit
conversion.
Update multi_json to 1.5.0
Options can be dumped as JSON
BuildOptions: simplify setting description
BuildOptions: check has_option? for universal and 32-bit
Return Option objects from used_options/unused_options
Refactor option handling internals

Currently we handle options in several ways, and it is hard to remember
what code needs an option string ("--foo"), what needs only the name
("foo") and what needs an Option object.

Now that Option objects can act as strings and be converted to JSON, we
can start using them instead of passing around strings between Formula
objects, Tab objects, and ARGV-style arrays.

The Options class is a special collection that can be queried for the
inclusion of options in any form: '--foo', 'foo', or Option.new("foo").
Move BuildOptions to a separate file
Tests for Option and Options
Test for BuildOptions