Implement consuming ipmi notifications from Ironic

This borrows heavily from the compute notifications code. The basic
idea is that there are few classes of samples that can be had
(Fan, Temperature, Voltage, Current). Within these are potentially
multiple individual sensors and values. In all cases the volume and
unit of a sample can always be extracted from the value of a
'Sensor Reading' key. The volume is cast to a float. If the value
is 'Disabled' the data is dropped.

Each subclass exists to allow flexible handling via stevedore, but
all activity is performed in the superclass.

The supplied good test data is the currently blessed sample from the
Ironic team. The bad test data tickles either skipping missing data or
producing warnings in the log.

Identifier and name construction is worth a close look because this
is an area of frequent discussion:

* resource_id is composed from node_uuid and sensor id
* meter name is based on the class name and is generic, only
  paired with a resource_id does it identify a specific sensor
* unit is parsed out of sensor data and mapped to SI units

Change-Id: Ie7ac92aebb45fc23d6134b4d6693f8a1e4d4ea40
Implements blueprint ironic-notifications
Merge "Implement consuming ipmi notifications from Ironic"