Indexed Templates: Add CRUD API, explicit template types

This change allows the creation,update and deletion of indexed templates via the _search/template/{id} endpoint.
Storing a template :
curl -XPUT 'http://localhost:9200/_search/template/1a' -d '
{
  "template": {
    "query": { "match_all": {}},
    "size": "{{my_size}}"
  }
}'
Deleting a template:
curl -XDELETE 'http://localhost:9200/_search/template/1a'
Getting a template:
curl -XGET 'http://localhost:9200/_search/template/1a'
Using an indexed template:
curl -XGET 'http://localhost:9200/_search/template' -d '
{
  "template":
  {
    "id" : "1a"
  },
  "params": {
    "my_size": 100
  }
}'
Or more simply:
curl -XGET 'http://localhost:9200/_search/template' -d '
{
  "id" : "1a",
  "params": {
    "my_size": 100
  }
}'
To access on disk templates in template queries the file parameter must now be used. This does break backwards compatiblity with previous versions
since the template "query" was previously aliased to dynamic inline templates or on disk templates.

See #5637