Try to hide private APIs.
Redesign the data store.

 - Transaction and DataStore classes are now facades for an internal transaction and datastore class. The internal classes are tightly coupled together because the Transaction is actually a RAII mutator for datastore
 - First few steps to move all the logic for manipulating the XML DOM tree into the operations. The DataStore is basically a container for the XML document, and a collection of transactions (which are in turn a collection of operations)
 - Then the operations have a pure virtual execute method, taking the DOM to manipulate.

This should separate the component into manageable bits. The Transaction and DataStore forms one entity, and the operations just maps over the existing XML DOM.

(sorry, unit tests have not been refactored yet.)
Move all the operation logic from the internal data store to the operation classes.
Reimplemented the functionality in the new classes.
Fix the tests.
Fix all tests.
Copy ctor and assignment of transactions are not allowed.
Roll back transactions if they go out of scope but was not committed.
Rename InternalDataStore to Internal::DataStore.
Fix lints.
Replace Utils::Option with boost::optional. Resolves #168.
Properly exclude boost from code coverage analysis.
Forgot to commit.
We need boost.
Reintroduce implicit conversion to boolean.
Much lint such annoyance.
Merge pull request #170 from lowjoel/use-boost-option

Use boost::optional
Logic fix for icon activation.
Fixed comments.
Cleaned up assert statement.