Added multiple 'Undo Delete Cell' in Notebook 

The 'Undo Delete Cell' function in the notebook currently only allows a single undo (issue #4924).
I modified the notebook.js file so that it is possible to restore the last `Notebook.undelete_max` deleted cells at the correct indices in the notebook.
I replaced the corresponding variables (`undelete_backup`, `undelete_index`, `undelete_below`) with arrays to store this deleted cell history and used the `push`, `pop` and `shift`  methods to establish the desired FIFO like behaviour.
As a side effect I fixed a off-by-one error in the `insert_element_at_index` function.
I set the deleted cell history size to 10 what seems reasonable to me (unless your 'd'-key gets stuck ;) ).
I tested everything in chromium-browser and checked the js-console for possible errrors. So far it just works as expected.
@ellisonbg 

I would make these 3 a list of `{backup:, index:, below}` to make it harder to get it wrong.