Fix up splitdns323fw

Rewrites are hard.  Let's go shopping.
Improvements for Ruby 2.0 compatibility

Thanks to Christian Hofstaedtler <zeha@debian.org> for the patch.
Use PATH ruby, not necessarily system ruby
Release 0.6
Fix handling of the "compat ID"

Turns out my understanding of the "compat ID" was kinda wrong -- rather than
it being two separate fields, it instead consists of a flag ("do we have a
compat ID?") and then the compat ID value.  So we now handle that.
Document all our options properly
Rename file ivars to be more specific as to their purpose
Refactor file part manipulation into individual classes

Rather than duplicate the same code to verify and get info about files
throughout the class, I've chopped it all into a class hierarchy for each
different type of file (kernel, initrd, defaults).  This makes it a bit
easier to reason about what's going on, and will also make life a bit easier
in the future when we start supporting more varieties of firmware file.
Switch to using cstruct for parsing the header

I've had enough of manually using pack/unpack, and if I'm going to be
dealing with other header formats in the future, I need to be able to more
easily switch out header formats without going to excessive trouble.
Remove header size as a magic constant

That'll work *much* better.
Embed some validation logic in the header struct class

This will make it easier to iterate through several header formats and
detect which (if any) are appropriate for a given firmware file.
Cleanup a bit of whitespace
Support new-style (DNS-320, etc) device firmwares

This involves a reasonable amount of dickering around, but doesn't break
backwards compatibility at all, which is always nice.
Add support for pre-selecting all parameters for a given device
Add a Rakefile for easier release / testing
Don't need the Rakefile in our releases
Report on variations in length in test failures
Convert to use ffi rather than cstruct

While cstruct has slightly cleaner syntax for the simple stuff, there's a
bunch of stuff it just doesn't implement, and there's a nasty, nasty bug in
string assignment handling that I'd patched locally without recalling,
meaning that this didn't actually work for anyone else.
Add offsets for each field to the structs

Makes it a lot easier to work out what's gone wrong when looking at the
hex dumps.
Write out failed firmware files, for manual analysis