Replace RSpec with test/unit+mocha.  Fix requires.

The nvpair tests require mocking the library calls that are used to lookup
values.  With RSpec one can simply pass a block to .with().  Mocha doesn't
have an equivalent.  So, at least for now, just redefine the class method.
Workaround broken libzfs libraries without libavl.

Fixes using libzfs via FFI in systems that have a libzfs.so whose linking
didn't explicitly reference libavl.
Add whitespace for clarity.
Import libuutil.so in addition to libavl.so.
Move CLI commands to separate files in bin/.
Mode change after removing CLI parser.
Extend the CLIs to take attribute options.
Fix parsing of string nv pairs.
Add NVList#has_key? mirroring from Hash.
Add ZFS vdev traversal.  Make ZFS::Pool Enumerable.

ZFS::Pool instances are not themselves collections; so now as a class they
are enumerable.  Add ZFS::Pool.find_by_name to complement ZFS::Pool.find
using a more natural lookup mechanism.

Implement ZFS::Pool#root_vdev.

Implement ZFS::Device support.  Add ZFS::Device#children, which generates
Device objects in the tree.  Add a basic ZFS::Device#method_missing,
which references entries in the Device's config_nvl.
Test whitespace embellishment.
Refactor common zfs test routines to test_helper.

Improve the pool setup & teardown:
- Skip any pool tests if not running as root.
- If no geom disk is available, try using a memory disk.
- If pool setup fails during the critical stage, always call teardown.
- Randomize the pool name to avoid simultaneous test conflicts.

Refactor TestBasic#test_zfs_pool_lookup_works to use ZFS::Pool.find_by_name,
and assert_not_nil().
More testing & functional improvements.

lib/zfs/dataset.rb:
- Add ZFS::Dataset.create(name, opts={}).  This creates the desired dataset,
  returning the fully qualified object for the given dataset.  The
  expectation is that if a filesystem is desired, one calls ZFS::FS.create,
  for snapshots it would be ZFS::Snapshot.create, etc.
- Add ZFS::Dataset#==(other).  For simple comparisons, if the two objects
  have the same dataset name, they're equivalent.
- Fix ZFS::Dataset#method_missing.  This never worked before, because it
  failed to convert the symbol for method to a string, in order to match the
  type in @properties.

lib/zfs/dataset.rb:
lib/zfs/fs.rb:
- Reduce the string size of ZFS::*#inspect by removing properties, children,
  and other similar things which can be invariably long.  If it's useful,
  specific other properties could be included in the future.

test/test_helper.rb:
test/functional/zfs_basic_test.rb:
- Generate pool & pool root filesystem objects for tests to use.  Use these
  instead of @poolname.

test/functional/zfs_basic_test.rb:
- Add a children traversal test.  Add a property lookup test.
Fix NVValue::String#to_native, which is a **.

This fixes the unit test for the string nvpair.  This was previously broken
because I noticed that strings were not parsed correctly in reading the
nvlist for a vdev.  That was fixed in 10200bc238cc819f4fc2c2709ea78fcdab177b2d,
so this is just to fix the unit tests and NVValue::String#to_native itself.
Reverse assert_equal argument order.

When these tests fail, this will now yield the correct
'expected <foo>, was <bar>' order.