without_self returns scope when not persisted.

Fixes #157
pulled out the columns and model modules into their own files, and pulled out the move_to logic into its own object
pull out pruning logic into its own module and split up complex method
pull out moving logic into its own module and break up complex methods
move rebuild into its own class and simplify code
move complex iteration methods into separate module (one of them has no tests, and it doesn't seem to behave correctly but I don't know enough about it to know for sure)
refactor complex sql conditions
move retry transaction logic into module, and moved set validation sql query into class and replaced strings with Arel.