extracting benchmark interface

added benchmark, benchmark factory, config and timings interfaces in a
generic form, and modified the arraywalk implementation to use them