Improvements to the reserved names code to allow sub-classing.

Subclasses of UCF::Container can now override methods to add their own reserved
file and directory names.

Lots of tests added to check this stays working.
Move exceptions to a new source file.

There will soon be more of them...
Use a base class for UCF exceptions.
Standardize the MalformedUCFError exception messages.

Simply adds a standard header to an optional reason passed in.
Add an exception for clashes with reserved names.

This is to be raised when trying to add a file or directory that uses a
reserved name to a UCF document.
Implement Container#add to avoid using reserved names.

This method was previously forwarded through to the underlying zip file. Now
there is an explicit test to stop reserved names being added.
Raise an exception if renaming to a reserved name.

Renaming a reserved name does nothing but renaming *to* a reserved name raises
a ReservedNameClashError.
Implement Container#mkdir to avoid using reserved names.

This method was previously forwarded through to the underlying zip file. Now
there is an explicit test to stop directories with reserved names being added.
Make sure testing reserved names copes with trailing slashes.

In zip files directory names are often passed about with trailing slashes, so we
need to be wise to this when testing reserved name clashes.
Add a Code Climate badge to the ReadMe.

4.0 yay!