First pass at implementing the /clone command #590
So, this is a big one that requires a lot of manual testing (tried writing some unit tests, but the mocks just weren't that easy to create). This implementation shouldn't require too much memory when executing, due to the dynamic direction of the iteration in order to avoid any overlap. By making it dynamic for each axis, I was able to clone without staging copies of each block in memory first. As mentioned, I did as much manual testing as I could, but doubtless I have missed several scenarios that may break this. More eyes are needed on this change before it should be merged.