Add LVM support, and use recommended xfs settings, as per RHS.

* Add LVM support.
* Add optional partitioning.
* Set xfs inode size, for xattr performance.
* Set xfs logical block size for directory performance.
* Set xfs stripe unit size and stripe width for RAID alignment.
Small LVM fixes.

Secret pop quiz

Q: What characters are [in]valid in LVM VG names?
Hint: The + char is valid, but the # char is not.
Lower case use of k, not upper case, as per performance documentation.
Allow specifying brick device and other parameters in gluster::simple.

This patch adds support to specify the brick device values as a hash.
It also allows for separate defaults that apply to the whole cluster.
Make use of ping (actually, fping) optional in gluster::simple.

This is useful for environments that don't include fping.
Usage of fping (or similar) is still recommended to make you less likely
to get an error on volume creation if one host isn't up.
Add in a custom sponge utility to break the dependence on the EPEL repo.
Directory variables should be nil if invalid.
Add support for volume set groups.

This adds support for setting volume set groups which are groups of
properties that are set all at once on a volume. This is managed in a
clever way, so that if the definition of what a certain group contains
gets updated by the package manager, your volumes will get updated too,
on the next puppet run.
Small fixes to avoid warnings.
Add advanced set group support for anyone without stock support.

This adds custom set group support for users that might not have the
feature (I think it might only exist in RHS) and also to users who want
to add their own custom groups! Please ping me if the stock groups gain
or lose parameters, or if their set values change!
Fix small bugs for setgroups.
Fix small bugs and warnings.
Add per volume support for brick chaining.

* Don't use this feature unless you _really_ know what you're doing.
* Managing chained volumes is much harder than managing normal ones.
* If some of the volumes in the cluster use this, and others don't, then
you'll probably have an even crazier time with management.
* Please verify my algorithm and feel free to suggest changes.
* Some edge cases haven't been tested.
* This patch breaks out brick layout ordering into individual functions.
Remove algorithmic brick layout ordering that happens in the fact.

Since different brick layouts are now implemented, it makes sense to
remove any remaining traces of the algorithmic work from the fact...
Fix small bugs with chaining.
Fix small chaining bugs.
Plug in volume layout and setgroups into vagrant.

This makes it easier to test and try out these features!
Silence unnecessary warnings if we know they're unnecessary.
Improve brick count input and parsing.
Setting volume properties should be race-free.

This isn't essential, as ensuring this is race-free is really up to
glusterfs, but with this patch you reduce the likelihood to ~0% that
you'll see a: "volume set: failed: Another transaction is in progress."
error. The error isn't harmful, but now we'll see less unnecessary red.