Use internal_register_device in register_device.
Make priority itself as priority queue of times.
Use ScheduleMerger as priorities.
Don't replace @schedule.
Use time as priority again.
Don't drop scheduled wakeup.
Consume run_end_time as much as possible.