handle non-lazy default and builder when init_arg is undef
We were skipping attributes entirely in new if there's no init_arg, but
this is not correct - given a non-lazy default or builder the attribute
should be initialized during new().
To handle this, I've re-ordered the checks slightly in Constructor.pm to
do the "is_simple" check first - an attribute with a default or builder
will fail that check, then we skip anyway if no init_arg and no default
or builder (yes, this is hardcoded-ish, but in that case we're definitely
not constructing anything so far as I can see). default and builder are
disregarded if lazy so as not to try and populate pure-lazy attributes.
Accessor also needed tweaking so it could handle the concept of a thing to
build without an init_arg to populate from. This only needs to happen in
one branch since the other branch is for "no default or builder" and thus
never reached.