Simplify no-results message for events listings

The no-results state for events listings a filters needed a bit of cleanup as we were handling the states in CSS:

- Refactor no-results message to not use CSS
- Require a no-results message to passed when including the events list fragment
- Don't pass `PageInfo` as it is not being used
- Add `isFilterable` option to list fragment to only add filter classes when needed.
- Update `filter.js` to render no results message when there are no filtered results
- Refactor `filter.js` to better match coding style of other modules, and swapped `bean` for native events. Add guard so it doesn't always run.
- Updated category filter in `filter.js` to not be tied to masterclasses.

**Quick demo to confirm the refactor has not affected filters:**

![filters mov](https://cloud.githubusercontent.com/assets/123386/5577913/b374d7ee-9013-11e4-9f56-00c4661f0792.gif)

This is an interesting one – when I first wrote it, it did just toggle a class, but this broke the layout, which was dependent on `nth-child` selectors (which still apply even if the element is hidden :cry:). Once I fixed that, it still had to re-render the DOM so it could re-order the matching elements by their search score. Finally, we pulled out the string search library that was originally here and did the simple `.search()` code below, which just returns a boolean, not a score – therefore, the re-ordering isn't needed. I think we still have the CSS problem, though...?