refactor the naming within plugin new generator

Having a method called `full?`, which checks on :full and :mountable
is very confusing. I renamed `full?` to `engine?` and created a `full?`
method that only checks the `:full` option
Refactoring the token_and_options method to fix bugs

Adding a test for the equal trun bug

Adding a test for the after equal trunc bug

Adding a test for the slash bug

Adding a test for the slash quote bug

Adding a helper method for creating a sample request object with token

Writing a method to create params array from raw params

Writing a method to rewrite param values in the params

Writing a method to get the token params from an authorization value

Refactoring the token_and_options method to fix bugs

Removing unnessecary test

A constant for this shared regex seemed appropriate

Wanting to split up this logic

Adding small documentation pieces
change spy of  after invoked controller action. because ruby-2.0.0 waned unused variables
Prevent callback from being set twice.

When you add one callack in two separate `set_callback` calls - it is
only called once.

When you do it in one `set_callback` call - it is called twice.

This violates the principle of least astonishment for me. Duplicating
callback is usually an error. There is a correct and obvious way to do
anything without this "feature".

If you want to do

    before_save :clear_balance, :calculate_tax, :clear_balance

or whatever, you should better do

    before_save :carefully_calculate_tax

    def carefully_calculate_tax
      clear_balance
      calculate_tax
      clear_balance
    end

And this even opens gates for some advanced refactorings, unlike the
first approach.

My assumptions are:

- Principle of least astonishment is violated, when callbacks are either
  prevented from duplication, or not.
- Duplicating callbacks is usually an error. When it is intentional -
  it's a smell of a bad design and can be approached without abusing
  this "feature".

My suggestion is: do not allow duplicating callbacks in one callback
call, like it is not allowed in separate callbacks call.
Eager loading made to use relation's in_clause_length instead of host's one (fixes #8474)
Simplify change_table and avoid duplicated logic
Simple replacement of variable name for consistency
Split ridiculously long line
Allow reverting of migration commands with Migration#revert [#8267]
Extract exec_migration  [#8267]
Allow revert of whole migration [#8267]
Add Migration#reversible for reversible data operations [#8267]
Add drop_join_table [#8267]
Make drop_table reversible [#8267]
Differentiate between remove_column and remove_columns. Make remove_column reversible.
[#8267]
Make remove_index reversible [#8267]
Factorize methods that are easily reversible [#8267]
Migration generators use `change` even for destructive methods [#8267]
Make change_table reversible when possible [#8267]
Make execute, change_column and remove_columns methods actually irreversible
[#8267]