Move merging logic into one place in ValueList class, improve error reporting

Refactor the complex logic for dealing with merging different types into one
place - the ValueList.render method. This removes the replication of the logic
in the *item.merge_over methods.

As part of the change the errors reported by ValueList.render when
merging is not allowed have been changed from standard python TypeErrors
to a reclass specific TypeMergeError which has more friendly
error reporting giving the parameter name and locations of the error.

To accomodate the error reporting change dicts and lists are subclassed
in parameters.py to allow a uri tag to placed on a newly created dictionary
or list.
14 files changed