Some optimizations around various ILog extension methods, Fixes issue 4.

@justinvp Could you kindly cast your eye on this? I've also added some missing extensions also. Cheers!
This is a minor nit, but `IsDebugEnabled()` already checks to ensure `logger` isn't null. Which means it's doing the same check twice.

One way to avoid the double check is to simply remove `GuardAgainstNulLogger(logger);` anywhere `Is*Enabled()` is used.

```c#
public static void Debug(this ILog logger, string message)
{
    if (logger.IsDebugEnabled())
    {
        logger.Log(LogLevel.Debug, message.AsFunc());
    }
}
````