Add a class cache to avoid runtime extend calls

 * Strainer has a class cache that creates Strainer subclasses for each filter set that is used on .create calls.
 * Context now creates a list of filters and passes this to Strainer.create to utilize the class cache in almost all use cases.
 * If add_filter was called after a render, then the method cache may still be invalidated.