luci-base: dispatcher: introduce firstnode() dispatching target
luci-base: dispatcher: introduce firstnode() dispatching target

The firstnode target will dispatch the request to the first eligible menu
subtree node that is not a redirect to another node, a special action or
post security enabled page.

That action is specifically useful for global category toplevel nodes like
"admin" which are supposed to simply direct access to the first installed
page node without having to hardcode specific choices.

Signed-off-by: Jo-Philipp Wich <bd73d35759d75cc215150d1bbc94f1b1078bee01@mein.io>

Noltari/luci,artynet/luci,lbthomsen/openwrt-luci,nmav/luci,lbthomsen/openwrt-luci,openwrt-es/openwrt-luci,artynet/luci,Noltari/luci,artynet/luci,tobiaswaldvogel/luci,lbthomsen/openwrt-luci,nmav/luci,openwrt-es/openwrt-luci,lbthomsen/openwrt-luci,openwrt-es/openwrt-luci,openwrt/luci,tobiaswaldvogel/luci,lbthomsen/openwrt-luci,nmav/luci,Noltari/luci,openwrt/luci,rogerpueyo/luci,openwrt-es/openwrt-luci,nmav/luci,openwrt/luci,Noltari/luci,openwrt-es/openwrt-luci,hnyman/luci,hnyman/luci,tobiaswaldvogel/luci,artynet/luci,openwrt-es/openwrt-luci,tobiaswaldvogel/luci,rogerpueyo/luci,Noltari/luci,artynet/luci,openwrt/luci,lbthomsen/openwrt-luci,hnyman/luci,openwrt/luci,tobiaswaldvogel/luci,artynet/luci,rogerpueyo/luci,openwrt/luci,rogerpueyo/luci,nmav/luci,rogerpueyo/luci,nmav/luci,Noltari/luci,openwrt-es/openwrt-luci,tobiaswaldvogel/luci,artynet/luci,tobiaswaldvogel/luci,artynet/luci,rogerpueyo/luci,openwrt-es/openwrt-luci,hnyman/luci,hnyman/luci,hnyman/luci,openwrt/luci,Noltari/luci,artynet/luci,rogerpueyo/luci,hnyman/luci,nmav/luci,nmav/luci,tobiaswaldvogel/luci,lbthomsen/openwrt-luci,nmav/luci,openwrt/luci,lbthomsen/openwrt-luci,rogerpueyo/luci,Noltari/luci,hnyman/luci,Noltari/luci