fix($compile): merge attributes safely to avoid upsetting IE8

Merging an `<input>` with an `<input>` in IE8 will automatically break because the "type" attribute may not be set automatically on in-document elements. This change makes Angular replace only unchanged attributes. Additionally, source and target attributes are only merged by concatenation if their values differ, to avoid unexpected results such as 'type="text text"'.

Closes #4029

CLA has been submitted electronically.

(Note that a further logical related change might be to only merge attribute values by concatenation in the case of "style" or "class":   see https://github.com/purcell/angular.js/commit/f919241a79f5c73dfcfb6511d0aa8b42e7f578e0, which is omitted from this pull request.)