Graceful shutdown

- Add shutdownGracefully() and isShuttingDown()
- Add shutdownFuture()
- Deprecate shutdown() / shutdownNow()
Typo
Do not return Future because there's no way to find an executor to run notifications
Implement the proposed methods + overall cleanup
Implement quiet period and timeout for graceful shutdown
Add test cases and fix bugs

- Replace lastAccessTime with lastRunTime and update it after task execution for accurate quiet period check
- Do not add an unnecessary wakeup task in execute()
Change the contract of takeTask() so that the subclasses deal with wakeup tasks correctly

- Add updateLastExecutionTime()
- Make sure runShutdownTasks() return true even if an exception was raised while running the shutdown tasks
- lastRunTime -> lastExecutionTime
- Replace the isShutdown() calls with isShuttingDown() to conform to the new semantics
- Inspector cleanup
Use shutdownGracefully() wherever possible / Deprecation javadoc
Reduce the running time of SingleThreadEventLoopTest