compiler: Reducer fixes for inner definitions

- Don't drop initial bindings for unused mutable values as their later
  mutation could fail. This was properly handled for top-level
  definitions but the corresponding change never happened for inner
  definitions

- Don't drop bindings for unused variables if we can't guarantee that
  their value satisfies the type for their strorage location. This
  ensure we will type check the initialiser even if its value is unused.

- Fix some bogus test names in BindingSuite
compiler: Rename et.*{Definition -> Define}

et.TopLevelDefinition and et.InternalDefinition are very verbose names.
Rename them to TopLevelDefine and InternalDefine