refactor interface using InterfaceBuilder class

This change encapsulates the logic associated with managing the
polymorphic interface to a separate class, and lets the Interface
module handle method definitions used by ActiveRecord classes.

There are no unit tests for the InterfaceBuilder because all of its
functionality is tested through the specs on the Interface module, and
unit testing is complicated by the reliance of all of this functionality
on ActiveRecord (meaning, the unit tests end up largely being redundant to
what is tested in the interface).
allow providing a new record to dynamic setter

Standard belongs_to relationships allow specifying new records for the
associated object, so we should allow it for polymorphic relationships too.
This commit changes it so that in the following situation:

class Shoe
  belongs_to_polymorphic :man, :woman, as: :wearer
end

we are able to write Shoe.new(wearer: Woman.new) and have it properly
associate the records.