elm logger

moved this from the Logging repo (aspnet/Logging#38), removed the Mvc dependency from the sample, and fixed scoping
Need to add `[NotNull]` in lots of places. Don't need to add it if DI is constructing the object, but in cases where a developer is calling the API we need to add guards.