Wrap block into another component for dragging support

The ReactorBlock component wraps around the actual block component
to handle drag operations. It also provides a `toData/0` for the
Editor component to retrieve.

Therefore we can move ReactorControls component to be directly
rendered by the Editor, and remove the need of passing the `idx`
to ReactorControls component's props.

Regarding drag, each ReactorBlock component contains a dropzone
that other ReactorBlock component can be dragged onto. No drop
handler yet.
Actually swap the blocks on drop

Unfortunately we need to pass the index to ReactorBlock component
so that it can pass back to Editor's drop handler to swap.

This is a nice thing with React.js is that you only need to swap
the blocks in Editor's state, and all the blocks are re-rendered
in the new order immediately. Imagine writing that in vanilla JS
or jQuery, ugh...