Fixing issues with rollback

Rollback was almost completely broken, there were basically two main issues:

1) The calculations of what migrations needs to be rolled-back was incorrect for rollback,
Since it was actually doing "what migrations need to be run"
2) The default behaviour of rollback was weird, it tried to rollback ALL migrations,
which, unlike forward migrations, is really really weird, since most of the time you
only want to rollback the last migration, and be very granular with it.

The code is still a mess IMHO, i've did my best to organize it.. but there are a few missing
helpers and objects..