Make errors more descriptive

It's easy to get into a situation where you don't know exactly what value is
running through your script/application when you trigger an error.

Adding the invalid value to the output makes it easier to work out what the
invalid value is and maybe start tracking down where it came from.

[I'd consider changing the die() to a croak()]
Add test script for descriptive errors
Switch to croak() instead of die()

This is more helpful for the person sending crazy values to the module's
methods; it lets them see where *they* sent the value, not where it was sanity
checked.