Add support for storing unknown attributes.

Assigning or receiving unknown attribute not longer raises an error
or silently drop the attributes. Instead they will be assigned to
the attributes hash an can be assessed through #attributes as well
as the attribute read/write helpers. If a public setter method
exists the method will be called. The #create class method uses this
to create a new object e.g. to kick in validations as well as
support unregistered attributes send to server. Also #save behaves
the same way, it will serialize all #attributes, even unknown.
The #initialize method will also assign unknown attributes. An
error will be raised if a private attribute setter with matching
name exists.

Example:
  class Session
    attribute :id, :integer
    attribute :user_id, :integer
  end

  session = Session.new login: 'js@example.com', password: 'secret'
  session.attributes #=> {"login"=>"js@example.com",
                     #    "password":"secret"}
  session.save       # Sends "login" and "password" as well as
                     # "id" and "user_id" attributes with default
                     # values.
                     # The server returns "id", "user_id" and
                     # "last_login".
  session.id         #=> 574658
  session.user_id    #=> 234
  session.attributes #=> {"login"=>"js@example.com",
                     #    "password":"secret",
                     #    "id":574658,
                     #    "user_id":234,
                     #    "last_login":"today"}