Private callback methods and refactoring

Greetings! (and sorry for the numerous edits of this pull request - there were some "technical" problems).
Here's a small update from a fan of spira. I believe that the hook (callback) methods generally should be made private (and thus provide for a good API design), but your current implementation calls them only if they are public. I've fixed that and wrote a spec to detect that "bug".

Also added a couple of refactoring commits - while generally making the code more readable (IMHO) and DRY, they were initially aimed at fixing a bug, which was surfaced by abrisse's introduction of Spira::Types::Data property type. Since I cannot submit a spec for it without merging abrisse's pull request, here's a way to detect it until the merge occurs:

class Person
include Spira::Resource
base_uri "http://example.org/people"
property :birthday, :predicate => FOAF.birthday, :type => Date
end
bob = Person.new("bob")
bob.destroy!

The exception is raised at this point, because :birthday property is nil, but Spira::Resource#repository_for_attributes attempts to instantiate it, ultimately calling Date.new(nil).