Fix crash when ps/source filtering.

We can't assume Msg here is going to be a msg record since
`logplex_utils:parse_msg` can sometimes return undefined for log lines
that don't match our pattern. Need to pull apart the record format
inside the match so we can fall down to the catch-all.

This should see the 500s we're sometimes seeing with filtered
tails. (the --ps or --source argument)
Turns out this breaks:

```erlang
filters([{<<"source">>, Source}|Tail], Filters) ->
    Filters1 = [fun(#msg{source=Source}) -> true;
                   (_) -> false
                end | Filters],
    filters(Tail, Filters1);
```

Because `Source` on the second line is treated like a new local rather than being forced to match against `Source` from the first line. I guess we could rename the inner local and use a guard, but at that point it might be clearer just to use `case` as originally.