TemplateDataBlob: Implement 'type' and 'label'

InterfaceText now defaults to null instead of {en:""} which
was awkward to deal with in the frontend.

As specified:
- label is InterfaceText
- type is a string and must be a one of the recognized types

Updated example for the hypothetical variant of Template:Unsigned
and removed other no longer needed example.

HTML output has been revised per conversation with Trevor,
James and Timo:
- Not sortable.
- Add label to html output.
- Aliases in the main parameter column (one per line),
  but muted in styling.
- Add type to html output.

The css module styles content from the server, not content
generated by javascript. Moved module to position => top to
fix flash of unstyled content.

Change-Id: I16d3f9e460c5513935b9b55fe4cec0092b38e6c2
TemplateDataBlob: Improve error handling

For invalid keys, pass property path, not just the latest
child.

Changes error:
 - Invalid value for "typo"
 + Invalid value for "params.date.typo"

Also cleaned up the concatenation logic for the others to
be more readable (PHP dots vs. string dots):
 - 'params.' . $paramName . '.key'
 + "params.{$paramName}.key"

Change-Id: I666e0b22f4b7bacc5b89b0761c74138732f94d73