Optimize canvas hit detection by rendering features in a limited extent

Inspired by @tsauerwein's work in #3065, this adds an optimization for hit detection with the Canvas renderer.  Features are only considered for hit checking if their extent intersects a buffered extent around the provided coordinate - using the buffer from the new `renderBuffer` property for vector layers (see #3061).

In some unscientific benchmarking, it looks like this cuts the hit detection time by up to 50% (~2.3ms v. ~4.9ms in the vector layer example and ~9ms v. ~16ms in the synthetic points example in worst case scenarios).