For 1, 2 and 4 take a look at "Task listeners", which allows you to run custom logic (eg. send an email) when a task is created/assigned/completed.
For 3, take a look at timer boundary events. If used with "cancelActitivity=false", you can have the process continue (after delay) to any step you which, effectively skipping the need to complete the task.
For 5, this is not as trivial. Once a task is completed, it's deleted and stored in history (if enabled). So reviving/reopening it cannot be done. you can, however, have your process loop back to the task to create a new instance of that task instead… However, this needs to be modelled explicitly, so just "reopening" any task in your workflow from anywhere is nearly impossible.