get_nth_prev..._inst...: Look ahead and carve
get_nth_prev..._inst...: Look ahead and carve

On variable-length instruction ISAs we currently guess where the
instructions start by going back as far as possible and then checking
over and over again until we find some offset where we disassemble the
correct number of instructions. For the default settings on x86_64 this
has us go back 45 instructions and it often takes a good handful of
tries to find a valid offset.

This change adds an optimization:

Instead of capping the disassembly to n+1 instructions, disassemble up
to the start address, but use as many instructions as that would take.
If we happen to disassemble more than we need, that's fine, just grab
the last n+1, and validate that they are OK.

Further: We don't need to check each instruction for validity until we
make sure that the address of the last instruction matches.

This was tested pretty thoroughly. When tested for correctness this
actually does BETTER than the old implementation. When tested for speed
it is 20+x faster on average.

hugsy/gef,hugsy/gef,hugsy/gef