Update bash completion

Check whether /dev/zfs is writable, and prefix zfs commands with sudo if
not. Far from bulletproof, but an incremental improvement nevertheless.
I don't want to try and make it *too* smart as the completions need to
load as nearly instantaneously as possible; this should at least cover
the most common cases.

Also, don't include snapshots in general-purpose completions (get,
inherit, list) by default. This makes working with large numbers of
snapshots considerably easier.
Improve bash completions for zfs get and list

The completion script now has some understanding of the switches to
these commands, and does a better job with comma-separated argument
lists.
Improve bash completion of user properties

These can be arbitrary values, and contain a colon, so need to be
handled specially as bash considers the colon to be a token separator.
Improve bash completions involving snapshots

This is just a first pass, allowing the possibility to complete snapshot
names without first having to build a list of every snapshot on the
system, and using the facility to flesh out the completion for zfs
clone, rollback, and send.
Allow completions to expand more snapshot names

It's now possible to get snapshot names expanded if the current argument
ends with an @, in places which previously wouldn't expand snapshots for
performance reasons.
Assorted bash completion improvements

Most notably a slightly less cumbersome way of specifying the switches
available for a given command.
bash completion: use builtins where possible

This makes the code more consistent and a little cleaner.

(Plus builtins are faster, not that that's likely to result in any
practical difference.)

There are still some uses of expr in places where it looked like the
most concise readable option.
Add completions for zfs snapshot, upgrade, destroy