Tighten up validation of links keys

This now requires that all keys in the links hash are underscored
alphanumeric strings.

This work also exposed a bug where nil would be allowed as a key.  This
is because when Enumerable#any? is used without a block, it returns true
if any of the items in the array are truthy.  This means that an array
containing nil returns false, so the validation was being skipped.