Don't instantiate ArrayList until needed

Most search requests will not be profiling, so the profile-dependent ArrayList
should not be initialized unless needed
Reconfigure merge to use variadic function

Also add helper methods to get components, lucene details, classname
Instantiate components in constructor

Prevents NPE and removes the need to check for null everywhere.
Use inline merge instead of temporary arraylist
Add simple verification tests