Add the ability to register filters

Of course, this will effectively only take effect when I add the methods
to control points from a protocol...
Merge branch 'master' into topic/add-observers
Sanitize Database API

Remove all the copies of update, replacing them with one noexcept and one
except version taking a Point.
This has the added advantage that the user can't transform a point from
one type to another accidentally.
Stop ignoring CMakeLists.txt and add it
Merge branch 'master' into topic/add-observers

Conflicts:
	CMakeLists.txt
Add filters

The database allows for one filter per data point. The filter will be
given the action being performed (write, select, operate, direct operate,
freeze or freeze-and-clear) the old value and the new value. Installing a
filter on a point removes the default filter for that point. Default
filters are:
* allow write only for strings and datasets;
* allow freeze and freeze-and-clear on counters and analog inputs;
* allow operate (only if selected) and direct operate on binary outputs and
  analog outputs.
Selects are not filtered (because they do not change the value of the
point).

You are advised to make your filters purely functional: if the filter for
any point change in a transaction returns false,  the transaction is
rolled back. If filters have side-effects, those side-effects will not be
rolled back, which may result in unwanted behaviour (e.g. your application
thinking an action has taken place while it hasn't).

Calls to Database::update are not filtered: Database::update is intended
to be used by the application internally to advise the library of a change
in the status (i.e. value) of a point. The control methods are intended
for use by a protocol. It is therefore assumed that your application has
pre-approved the transaction taking place, and it will therefore take
place.

Filters have the following signature:
	bool(Details::Action, Point, Point)
That is: they are given the action being performed, the new value of the
point (i.e. the value being proposed) and the current value being replaced
if the filter returns true. If the filter returns false, the value is not
changed and the error code "not allowed" is returned.
Move Cell into Details
Disable superfluous warnings
Add/adjust license headers
Add observer support
Update exceptions to latest public version