API FIX Use aria-describedby and default error element changed to span

Non-label error labels will now work correctly, with `aria-describedby` now superseding dependency on the 'for' attribute

This provides a solution to the discussion noted in #900.

A lot of work had to be done to rewrite the test cases to respect the 'span' error label... apologies if I have made any incorrect assumptions about this module.

For legacy reasons, if the error element is set as a label explicitly, it still sets the 'for' attribute, but it isn't used anywhere in the module.