Long titles with short items would lead to the title touching the edge
of the menu, which doesn't look good. Adding padding like is already
with the items remedies this.
`mbtn_left` and `wheel` events are now only fired on a `cursor.on_{event}` object, which resets at the beginning of each frame, so elements need to bind these listeners in their render functions. These properties are overwritable which allows elements to take over cursor event handling from their parents if necessary.
- Preselecting previous folder wasn't working sometimes.
- `join_path()` didn't account for drive letters already having a separator.
Also refactors how `open_file_navigation_menu()` stores menu items value. As a side effect this is now a lot faster as we don't have to serialize each item's path into meta table, but instead we now store just a path string and handle it as needed.
closes#355
Allows menus to use `spinner` as an item icon, which will display a rotating spinner. Along with a no-op command on an item and `keep_open=true`, this can be used to display placeholder menus/items that are still loading.
Extracts spinner from `BufferingIndicator` into `ass:spinner()` utility.
Without checking if mbtn_down happened first in the menu, it is possible
to select an item right after opening the menu from the controls.
(mbtn_down on control opens menu, mbtn_up selects item in menu)