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

* all autogenerated xs methods that return char * are now using
  sv_setpv() which always copies the string. See if we somehow can
  avoid the copy. If we do so, we need to be careful with method which
  take a pool argument, such as: 
  Apache::ServerUtil
   - mpxs_Apache2__ServerUtil_server_root_relative
  Apache::URI:
  - ap_construct_server
  - ap_construct_url
  APR::URI
  - mpxs_apr_uri_parse
  Apache::Util
  - ap_ht_time
  - escape_path
  for which we need to attach the pool object used to create those
  strings as a magic.

* 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. 
