Add native file-system key storage driver (and other minor changes)

### Native File-System Storage Driver
* Everything except key wrapping implemented.
* Save/load are fault tolerant.
* Unit tests included.

### Other Changes
* Expanded storage exception hierarchy.
* K2Storage.open(String) automatically percent-encodes common characters.
* Organized all address processing utilities into one class (and unit tested it).
* Simplified existing unit tests by throwing unexpected exceptions rather than catching.
* Made 'core' and 'type' fields required when deserializing Keys and KeyVersions (otherwise a zero-byte proto is acceptable).
Java does have the URLDecoder/URLEncoder classes, but they don't quite do what I need them to do. URLDecoder decodes all encoded characters, which can change the interpretation of the URI (the utility method here only decodes the 'unreserved' subset); it's really only meant to be used on the query component of the URI. Similar issue with the encoder class.

I'll have to look harder to see if there are open-source libraries that will do this. Perhaps we can replace these methods later on.