Moving for Chasse
Modified the code to be able to report detailed error information to new relic.
Extracted New Relic exception handling into its own class

The new relic exception logging code is now pulled out and is accessed
via a 'Listener' interface. To utilize this listener interface, modify
your teaservlet.xml file to include the following element (as a peer to
the <plugins> element)

<listeners>
        <NewRelicExceptionListener>

<class>com.go.teaservlet.listeners.NewRelicExceptionListener</class>
        </NewRelicExceptionListener>
    </listeners>

Then when the TeaServlet is constructed, it will load up all defined
listeners. The listeners can then easily be called by iterating over
them: (this example only calls thos listeners that are
ExceptionListeners
for ( Listener listener: mListeners ) {
    if ( listener instanceof ExceptionListener ) {
        ((ExceptionListener)listener).handle(e);
    }
}
Changed the ExceptionListener class to be an interface instead.
Removed the NewRelicExceptionListener out into espn-only
Add improved exception handling from +shawnchasse

Extracted exception handling into its own class
The exception logging code is now pulled out and is accessed
via a 'Listener' interface. To utilize this listener interface, modify
your teaservlet.xml file to include the following element (as a peer to
the <plugins> element)

    <listeners>
        <MyExceptionListener>
            <class>com.company.MyExceptionListener</class>
        </MyExceptionListener>
    </listeners>

Then when the TeaServlet is constructed, it will load up all defined
listeners. The listeners can then easily be called by iterating over
them: (this example only calls thos listeners that are
ExceptionListeners

for ( Listener listener: mListeners ) {
    if ( listener instanceof ExceptionListener ) {
        ((ExceptionListener)listener).handle(e);
    }
}