Introduce values of type T_DWARF

- The goal is to abstract away existence of anything Dwarf-related
  from the execution engine itself to Dwarf values.

- A new word (dwopen :: ?T_STR -> ?T_DWARF) converts a filename to a
  Dwarf (actually a Dwfl) objects.  Update calling conventions
  throughout, now that we can't rely on graph carrying this
  information.  Each Dwarf value needs to carry this Dwfl pointer
  along, otherwise it gets garbage-collected.

- Root cache is still disabled.  Parent cache seems enabled, but the
  integration might be buggy.  Both need to be moved from the
  dwgrep_graph object over to the T_DWARF handle.
Carry caches along with T_DWARF value

- Introduce dwfl_context that carries a std::shared_ptr<Dwfl> and the
  caches.

- Have all Dwarf values hold reference to this.

- Enable root cache again--most test cases now pass.
Test suite now passes

- The remaining failures happened because libdwfl now relocates our .o
  files--libdw didn't used to.  (Which is one of the reasons that we
  use libdwfl now.)
Drop verbose annotations of when Dwfl is created and destroyed

- Those were in as a debugging aid to make sure any sigsegvs are due
  to the underlying Dwfl having been destroyed.