Set rabbit_hosts to a list of controllers

Connecting to RabbitMQ via HAProxy results in hung AMQP sessions after
controller failover or VIP move. To work around this problem, OpenStack
services have to be configured to connect directly to RabbitMQ services
on controllers nodes via rabbit_hosts variable, which makes impl_kombu
cycle through the listed hosts when attempting to reconnect. On
controller nodes, preference is given to the local RabbitMQ service on
the same controller node.

AMQP client configuration for all OpenStack components is centralized in
osnailyfacter and propagated through Puppet classes in a consistent
manner. The exception is Neutron that uses its own
sanitize_neutron_config() function to parse configuration from
osnailyfacter. That function was extended to generate AMQP hosts list
consistently with the above, and fixed to correctly sanitize instances
of Array subclasses.

No changes were made to Murano manifests since it has its own RPC
implementation that is inconsistent with the rest of the OpenStack.

In addition to AMQP client configuration, crm configuration is modified
to set flush_routes flag and resource stickiness for all virtual IP
addresses. The flush_routes flag reduces the probability of connections
becoming hung on nodes that a VIP moves away from, and resource
stickiness prevent unnecessary movement of VIP resources between
controllers.

Change-Id: Ib839032b2f1aa820b4afc64b0a9badf13414d488
Partial-bug: #1285449