Update Logger

Gives us better messages by automatically prinitng 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, we do less work if logging is suppressed.
Instead of having clients format their own strings, it will 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
```