Rework dynamic_reference management, introduce dynamic_reference_nocheck

New dynamic references are now resolved at construction and all of them are re-resolved when a relevant service is added or removed; resolution is no longer done in operator->

dynamic_reference_nocheck is a variant of dynamic_reference that does not check for value being null in operator-> / operator*
dynamic_reference still throws an exception when used in this case

Both kinds of dynamic references support .check(): an exception is thrown if this is called when value is null
Allow dynamic references to reference ServiceProviders, introduce ModeReference

Mode handlers can be referenced using mode/<modename>
Unite include/modes/*.h into include/builtinmodes.h
Add builtin modes using AddService()
Migrate u_listmode.h into the core, change +b to use it
ListModeBase: Minor changes to original u_listmode code

- Add constructors to ListItem, ListLimit
- Rename fields in ListItem
- Store time as time_t instead of string
- Store limits in a vector instead of a list
- Don't deallocate the list when it becomes empty
ListModeBase: Cache max items per channel