Introduce EventExecutor.shutdownGracefully() that deprecates shutdown()

shutdownGracefully() provides two optional parameters that give more
control over when an executor has to be shut down.

- Add shutdownGracefully(..) and isShuttingDown()
- Deprecate shutdown() / shutdownNow()
- Replace lastAccessTime with lastExecutionTime and update it after task
  execution for accurate quiet period check
  - runAllTasks() and runShutdownTasks() update it automatically.
  - Add updateLastExecutionTime() so that subclasses can update it
- Do not add an unnecessary wakeup task in execute() if wakeup(boolean)
  was not overriden.  If not overridden, what wakeup(..) actually does
  is adding a wakeup task to the queue, so it's unnecessary for
  execute().
- Use shutdownGracefully() wherever possible / Deprecation javadoc
- Reduce the running time of SingleThreadEventLoopTest from 40s to 15s
  using custom graceful shutdown parameters

- Other changes made along with this commit:
  - takeTask() does not throw InterruptedException anymore.
    - Returns null on interruption or wakeup
  - Make sure runShutdownTasks() return true even if an exception was
    raised while running the shutdown tasks
  - Remove unnecessary isShutdown() checks
  - Consistent use of SingleThreadEventExecutor.nanoTime()