Display footer only if there are items in list

I believe the correct TodoMVC behavior is to hide footer if there are
no items present in todo-list.
Implement item hiding in more idiomatic way

This commits implements todo items hiding according to filter state
in a more (i believe) idiomatic way.

Instead of relying on css class to show/hide particular DOM element,
when we specify parent component (TodoList) we first filter through
app items and call child component (Item) only when it's not hidden
according to our display logic (determined by hidden? function).

It has a nice side-effect that we don't have to pass [item filter]
tuple to Item component as just item us sufficient and also fixes
the bug that whenever our filter state was set to 'complete' and we
added new todo item, this item was shown in the list even when it
should really be hidden in my opinion.
Use put! calls instead of go-blocks for events

I believe that put! calls are more idiomatic way to put value on
core.async channel from callback as we are not interested in
establishing state machine created by go macro, it's basically ->

'put the value on channel and i am not interested in rendezvous
wit the consumer, there is no need for coordination, thanks'

I hope my understanding of core.async is correct though, so please
review carefully :)