Refactor Wlxml type creation

Without this commit, Wlxml based types could only have one namevar
called name. This is inflexible for many reasons. First, Puppet supports
composite namevars. Second, not every entity in XML is going to have its
identity controlled by an element called 'name'. Last, root_elements do
not have elements that specify their uniqueness. For root_elements it
comes from some other source like raw file path for example.
Additionally, this module already supported matching prefetched
instances with resources based on composite namevars, so without this
commit things are just plain inconsistent.

This commit rewrote the portion of the create() call used by the ensure
property. It first added a bypass for when this module is the base of a
root_element type. It also added the ability to create many elements based
their parameter name -> component relationship and the fact that they
are marked as namevars.