Update Logger

Gives us better messages by automatically printing the calling thread
name, file and line number it was called from. This is relatively
expensive, and should not be enabled for production builds.
It's lazier in production, and we'll do less work if logging is suppressed. 
Instead of having clients format their own strings, it can now format it for them.
This lets us allocate fewer String objects.

```
Logger.d(hello + "," + world + "!");
// Allocates 5 string objects,
// even if logging is disabled

Logger.d("%s, %s!", hello, world);
// Allocates only three when logging is disabled