adds TopMenuItem model which encapsulates top_menu parsing logic

this commit pushes parsing logic for `SiteSetting.top_menu` into new class `TopMenuItem`

Important parts to review:

* documentation for TopMenuItem class, is that accurate ?
* code commit comments below, see `filter_summary`