Moved all the header implementation into the appropriate cpp files.

The NotificationCenter template implementations were moved into the NotificationCenter_impl.h file since they still need to be in the header as inlined. Also moved the Uuid operators into the class itself.
Added a String::padWithString() method to make it easy to pad strings for formatting purposes.
Changed up the timestamp formatting for the Log to be "yyyy-mm-dd hh:mm:ss" by adding proper padding.

Previously, the padding logic was wrong and the zeroes were getting appended to the minutes and seconds strings instead of prepended. Also moved the year to the front of the string and added padding for the month, day and hour.
Replaced all the Log macros with functions implemented in the implementation.

Just much better coding practice with safety checks. Had to implement a null std::ostream in the Log class to return when the log level is not high enough.
Replaced all the NotificationCenter macros with functions.

Also updated the example and unit tests.
NotificationCenter destructor now stores the list of keys still registered in the NotificationError description.
Fixed up some "header not found" compiler errors in the bumpExceptions example.
Created a templated Singleton class to make it easy to quickly create a thread-safe singleton.
Moved the Log, NotificationCenter and Timer singletons to use Singleton inheritance.