Fix edge case where ghost might not be at end

As you can see in the test case, the edge case is if you have:

    1+((2+3))

where the inner open-paren is a ghost, and you delete the outer
open-paren, which becomes a ghost and auto-expands to the far left end:

    (1+(2+3))

Before, the inner open-paren would remain a ghost, just hanging out, not
at the end of its block. Now, we call .siblingCreated() on the inner
open-paren to solidify it.

Note that there's no need for a symmetric call to origEnd's new sibling
because it gets .siblingDeleted() called on it by Controller::deleteDir
(in keystrokes.js).

(These should probably be changed to just .siblingChanged(), seeing as
origEnd's new sibling wasn't just created.)
Fix another edge case where ghost may not be at end

As you can see in the test case, the edge case is if you have:

    ([1+2]+{3+4})+5

where the open-bracket and close-brace are ghosts, and you delete the
outer open-paren, so it becomes:

    (1+2]+{3+4}+5

Before, the close-brace would remain a ghost, just hanging out, not at
the end of its block. Now, we call .siblingCreated() on the brace to
solidify it.

Note that there's again no need for a symmetric call to origEnd's new
sibling because it gets .siblingDeleted() called on it by
Controller::deleteDir (in keystrokes.js).

(Bracket::unwrap() should probably be making .siblingChanged() calls on
both sides of the unwrapped paren? But whatever; Cursor::unwrapGramp()
fails to call .siblingChanged() on the contents of the unwrapped command
too, so like, if you type `1/2+3)` (which gets you
`\frac{1}{\left(2+3\right)}`, with the open-paren a ghost), then delete
forward (which unwraps the fraction), you get `1(2+3)` with the
open-paren still a ghost, but really, whatever. That'll be fixed when
.siblingChanged() is eventually done properly.)
Solidify ghost after being selected and replaced

e.g. by LiveFraction, as in test case