Add LLVM ExecutionEngine API
Perform compiler state reset in phase_1
Fix #19734 (ICE)
Add test for issue #19734
auto merge of #19750 : murarth/rust/rusti-support, r=brson

Makes a couple changes that support the implementation of a REPL:

* Implementation of wrapper code for LLVM ExecutionEngine API
* Fixing a change I made earlier to reset compiler state in `phase_1_[...]`
  instead of `compile_input` as the latter is not used in a REPL
auto merge of #19778 : aochagavia/rust/ice, r=alexcrichton

Fixes #19734
Conventions and cleanup for Bitv and BitvSet

Part of #18424

This commit changes the semantics of `reserve` and `capacity` for Bitv and BitvSet to match conventions. It also introduces the notion of `reserve_index` and `reserve_index_exact` for collections with maximum-index-based capacity semantics.

Deprecates free function constructors in favour of functions on Bitv itself.

Changes `Bitv::pop` to return an Option rather than panicking.

Deprecates and renames several methods in favour of conventions.

Marks several blessed methods as unstable.

This commit also substantially refactors Bitv and BitvSet's implementations. The new implementation is simpler, cleaner, better documented, and more robust against overflows. It also reduces coupling between Bitv and BitvSet. Tests have been seperated into seperate submodules.

Fixes #16958

[breaking-change]
some huon fixes
make  return an Option
fix bitv pop
bitv: correct build failures

- Fix typos on Blocks and MutBlocks.
- Use slice_to_mut() for creating blocks_mut().
- Deref the block parameter in get().
- Access nbits separately from mutating set in pop().
bitv: Fix all() for nbits that are multiples of u32::BITS

The old logic would be ok with *either* 0 or all 1s in the last word,
because it didn't compute a proper mask for the case where nbits is an
exact multiple of u32::BITS.

Add mask_for_bits() to compute this properly, and use it in all().  Add
all/none assertions to most of the tests.  Note in particular, the all-zero
bitv in test_32_elements() was incorrectly all()==true before this patch.
bitv: reuse mask_for_bits() in grow()
bitv: Avoid undefined behavior in mask_for_bits

It was relying on the fact that x86 shifts are effectively %BITS, so
shifting a u32 by 32 preserves all bits.  But this is undefined behavior
in general.  Add an explicit %BITS to be safe.
Add a new invariant to `Bitv`

The length of the underlying vector must now be exactly as long as it needs to
be.
Change `Extend` and `FromIterator` functionality of `BitvSet`

Also fix up some tests from last commit.