Add support for alias "swap" using AliasParams

An alias swap is achieved by atomically deleting and re-creating the alias with
its new underlying indices. The existing ElasticClient.Swap only takes an alias
name and as a result any filtering, routing, etc. associated with that alias is
lost during the swap. This commit adds the ability to atomically swap aliases
involving filters, routing, etc.