Think about inheritance

It looks like `assemble_from` resets instance variables when it calls, so this would probably create strange behavior:

``` ruby
class Foo
  extend Assembler
  assemble_from :required, optional: :default
end

class Bar < Foo
  assemble_from :something_else
end
```

Namely, we're no longer requiring the `required` parameter, the `optional` parameter is no longer being set to the default we defined, and we still have private `attr_reader`'s for two methods that will never have values.

I'm not necessarily against the this behavior, but we should probably think about how we want inheritance to work and then ensure that's what's happening.  I sort of feel like calling `assemble_from` multiple times should be additive (both for inheritance and so it matches class declaration behavior).  Maybe we want a method called `assemble_from!` or `assemble_exclusively_from` that clears out previous input.