Log formatter

Fixes #3

Let me know anyway I can improve! I still feel like I'm learning 'the functional way' so any feedback is appreciated.


@fishcakez I am definitely not familiar with iodata or chardata so this is helpful thank you. 

I still think it is immediately obvious what's happening, map over the listdict, and build key=val pairs separated by a space.  With yours I'll break it down into every question I have as someone who's not intimately knowing iolist or chardata details:
```elixir
# Why is this returning a list where everything else returns a binary string? 
defp output(:metadata, _, _, _, []), do: [] 
defp output(:metadata, _, _, _, meta) do
  # What is ?\s is it a special sigil to denote the beginning of a chardata string? (Later realized its removing the leading space character, wasn't immediately obvious) 
  [?\s | rest] = Enum.reduce(meta, [], fn({key, val}, acc) -> [?\s, to_string(key), ?=, to_string(val) | acc] end)
                                                               #^ here is the ?\s again but this time it looks like its being used as a possible space? Yes thats it.
  rest #Again we are returning an array instead of a binary string like we do everywhere else. Or so it seems? 
end
```

Other than just returning a binary string now I see that its returning a list of characters which is what chardata is. 

My main gripes: 
1) The only place I see reference to characters in the elixir guide is http://elixir-lang.org/getting_started/6.html and it says we should mainly use them for interfacing with old libraries. 
2) Its still not complete obvious whats happening. An array of arrays of binary strings and space characters. It sure doesn't look like elixir. 

I cannot disagree your's will be faster.