Rewrite should modify this instead of returning new object

If a new object is returned, the rewritten query is no longer registered
in the search context and timings are lost to the void
Add ProfileFilter to enable profiling of filters
Add common interface
Enable filter profiling in Visitor
Reconfigure Visitor to return Arrays

Some queries/filters return several components, but it doesn't make sense
to create a Profile element on that level.

e.g. a Bool may have several queries, but the Bool is already wrapped in
 a ProfileQuery.  Creating a new Profile to hold the Bool's makes it appear
 as if the Bool is twice in the query