Add a :idle-priority keyword to change the running order of idle functions

This can be useful if you want to organize your init file in a logical order, and yet need some idle functions appearing at the end to run first.

I tried to ensure that this implementation is fully backwards compatible:
- a default priority of 5 is assigned if none is explicitly given
- all functions with the same priority are run in the order they are evaluated