Add a mechanism to add debug messages into an application.

These debug messages can then be directed to any appropriate output
medium for the target device, or disabled completely in a production build.

When disabled, these debug messages have zero runtime overhead.