Add exists, isReadable and isWritable
Add UncheckedIOException

Java 8 has it, but we still rely on Java 7 libraries. That
might or might not change in the near future.
Add documentation, throw UncheckedIOException

Wrapping the IOException with a SystemException in this case was a
bad decision. Instead we let the caller decide what to do with
the IOException: handle it, rethrow it, or if the exception can't
be handled rethrow an UserException (if the exception is expected
to happen, and / or when it does, the reason is the caller) or a
SystemException (if the exception is never expected to happen,
and / or when it does, the reason is the system).
Throw UncheckedIOException if can't locate

If the resource cannot be located we throw a FileNotFoundException
wrapped with an UncheckedIOException.
Fix file extension when there is no dot ('.')

The correct behavior is to return an empty string when the
basename does not contain any dot ('.') character.
Add TestFileResource