fix(script): parse template as JSON if content-type attr matches 'json'

This change is needed so that $http can avoid parsing JSON if an inline
template is in use.

BREAKING CHANGE: inline templates which were previously parsed as JSON by
default, now require the attribute `content-type` to contain the text 'json'.

Additionally, the data pushed into $templateCache by the script directive is
now always an array, with the following items:

[ status (200), data (script text or parsed JSON), headers (the empty object) ]

BEFORE:

```
<script type="text/ng-template" id="famous-foods.json">
{
  "elvis presley": "peanut butter, banana & bacon sandwich",
  "shirley temple": "whipped potatoes & roast beef",
  "marilyn monroe": "grilled steak"
}
</script>
```

AFTER:

```
<script type="text/ng-template" id="famous-foods.json" content-type="application/json">
{
  "elvis presley": "peanut butter, banana & bacon sandwich",
  "shirley temple": "whipped potatoes & roast beef",
  "marilyn monroe": "grilled steak"
}
</script>
fix($http): parse JSON only if Content-Type header contains string 'json'

The default behaviour breaks a wide variety of custom interpolation
markers. Even if the JSON text regexps were strengthened to closer
match the standard JSON format, it would still limit the possibilities
of different custom interpolation markers.

Instead, $http will no longer parse JSON if the response Content-Type header
does not include the term 'json', or if the $templateCache is used. For
inline templates, use the `content-type="json"` attribute to ensure that
inline JSON templates are parsed.

BREAKING CHANGE: Previously, responses would be parsed as JSON if their
content looked vaguely like JSON. Now, they are only parsed as JSON if their
Content-Type response header contains the term 'json', and if they are not
coming from the $templateCache.

Closes #5756
Closes #2973