[2023] Fix MenuItem label sorting

An alternative approach to #2023.

@macfanatic's `MenuItem` changes in 452956ec updated label procs to be evaluated in the view context, but this broke sorting of proc labels. This PR initially moved the sorting logic up into `TabbedNavigation`, where the view context is accessible. Later, I decided that this was a more elegant solution:
```ruby
# in the view context, e.g. `TabbedNavigation`
link_to item.label(self), item.url(self), item.html_options

# with this implementation
class MenuItem
  def label(context = nil)
    render_in_context context, @label
  end
end
```

This is the commit history of this PR from before I removed the outdated commits.
## First attempt

* b67d583 - moved sorting logic into `TabbedNavigation` to follow the trend
* bc20972 - renamed a `MethodOrProc` helper method (no longer included)

## Second attempt (adding to the above)

* 293b4d0 - tried a more OO approach, where you can pass in the view context to `MenuItem` to use for Procs
* e11fd6c - moved remaining `MenuItem`-specfic out of `TabbedNavigation` :heart:
* f60ebf7 - integrated fixes from #1988