Implement insertLookupWithKey and rewrite insert functions.

I rewrote all insert functions in terms of more general `` insertLookupGen ``` and we gain a little more speed.
The new benchmarks:
```
insert -- old
 	                         lower         upper
Mean execution time 	379.5 ns   400.6 ns
Standard deviation 	27.08 ns 	78.50 ns

insert -- new
 	lower upper bound
Mean execution time 	296.7 ns  304.7 ns
Standard deviation 	5.133 ns  30.69 ns
```