Resource objects, like java.io.File objects, are lightweight "token" objects.
LocalResource objects wrap a java.io.File, and UrlResource objects wrap a java.net.URL.
All resource objects keep a reference to their ResourceServer
and delegate many of their functions to it.
Resource objects are considered equal if they map to the same file or URL,
and have the same resource server.