###############################################
# working features but requiring optimization #
###############################################

* optimize modperl_callback_current_callback_(set|get) to use
  numerical equivalents of the phase names, instead of doing expensive
  memory allocs and string comparison operations. And only give the
  real string in the perl get API.

* consider using the temp pool for things that are needed only during
  the configuration and can be dropped before the actual serving is
  started. that pool gets destroyed right after the post-config phase
  is over.

* currently when ithreads-enabled perl is used anon-sub handlers are
  always deparsed and non-cached. there are several cases when this
  can be optimized. See modperl_handler_new_anon in modperl_handler.c

* modperl_package_unload() and modperl_xs_dl_*() share some duplicated
  logic. The managment of DynaLoaded modules could be somewhat cleaner. 
