[0.9 Final]

* org.ki.spring.SpringWebConfiguration renamed to org.apache.ki.spring.SpringIniWebConfiguration
* org.apache.ki.util.ThreadContext fixed to correctly work in child/spawned threads from a parent thread (sometimes surfaced in Tomcat environments)
* org.ki.web.servlet.FilterChainWrapper renamed to org.apache.ki.web.servlet.ProxiedFilterChain to maintain parallel naming conventions with ProxiedSession.
* org.apache.ki.web.attr.CookieAttribute#onRetrieveValue would return deleted cookies (maxAge of 0) on Tomcat.  It now only returns a value if the cookie is non null and maxAge != 0 (-1 or positive only).
* Added *AnnotationHandler implementations and refactored the AuthorizingAnnotationMethodInterceptor implementations
  to delegate to internal AnnotationHandler instances for performing authorization checks based on annotations.  This was
  done to ensure Annotations could be processed independently of where they are declared (method, class, etc).
* New Feature: added @RequiresGuest, @RequiresUser, @RequiresAuthentication annotations (and corresponding
  AnnotationHandler implementations to support them).
* Native SimpleSession session timeout bug fixed [JSEC-23]

[0.9 RC2]

* DelegatingSubject is now still usable after it is logged out (no invalid exceptions thrown).
  The Subject is now just considered 'anonymous' again at that point.

* ReflectionBuilder (used in Apache Ki .ini and web.xml based text configuration) now handles setting
  primitive attributes correctly, performing proper string-to-primitive conversion (BeanUtils does this automatically).

* ReflectionBuilder (used for Apache Ki .ini and web.xml configuration) now supports setting other previously configured
  objects by '$' reference. For example:
  bar = some.package.class.Bar
  foo = some.package.class.Foo
  foo.bar = $bar



