Depend on resource to provide document path

Without this commit, the provider was looking for the developer to
indicate which variable in resource contained the document_path. This is
not really a sound interface between the resource and provider and makes
the code very inflexible.

This commit changes the relationship between resource and provider. This
change is not backwards compatible but does enable smarter interactions
in the future. With this change, the provider now expects the resource
to implement a `document_path` method. This method on the resource
should return a valid file path. The resource itself remains responsible
for validation of the file path.
Refactor access to 'resource' object from provider

Without this commit, the provider was accessing the instance variable
`@resource` directly. This goes against good practice in general, but
is made worse by the fact that I switching between the resource method
and the instance variable for no reason.

This commit refactor all access to the resource object to be via the
accessor function.