smartplaylists: support for virtual folders

These changes implement a feature that has been requested quite a few times on the forum and IMO is something that will make smartplaylists (and therefore library customization) even more powerful and versatile.

There's a new smartplaylist field called "virtual folder" which basically works the same as the "playlist" field but instead of resolving the referenced smartplaylist into an SQL query and integrating it with any other rules specified for the smartplaylist, the referenced smartplaylists are added to the resulting list as (virtual) folders with the name of the referenced smartplaylist. That way users can now also build tree-structures with combinations of smartplaylists. Lists with virtual folders can also contain references to smartplaylists that are resolved into a list of actual media items or other filter rules resulting in a mixed list of virtual folders (pointing to other smartplaylists) and media items of a specific type.

The commits also contain some new utility methods which should reduce code duplication. Furthermore I've extended the browse logic for referenced smartplaylists to only list smartplaylists that are compatible with the type of the current smartplaylist or are grouped. That should avoid any confusion when users e.g. reference a movie smartplaylist in a tvshows smartplaylist which would result in an invalid SQL query.