ext4: speed up truncate/unlink by not using bforget() unless needed

Do not iterate over data blocks scanning for bh's to forget as they're
never exist. This improves time taken by unlink / truncate syscall.
Tested by continuously truncating file that is being written by dd.
Another test is rm -rf of linux tree while tar unpacks it. With
ordered data mode condition unlikely(!tbh) was always met in
ext4_free_blocks. With journal data mode tbh was found only few times,
so optimisation is also possible.

Unlinking fallocated 60G file after doing sync && echo 3 >
/proc/sys/vm/drop_caches && time rm --help

X86 before (linux 3.6-rc4):
real    0m2.710s
user    0m0.000s
sys     0m1.530s

X86 after:
real    0m0.644s
user    0m0.003s
sys     0m0.060s

MIPS before (linux 2.6.37):
real    0m 4.93s
user    0m 0.00s
sys     0m 4.61s

MIPS after:
real    0m 0.16s
user    0m 0.00s
sys     0m 0.06s

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Andrey Sidorov <qrxd43@motorola.com>

Signed-off-by: amperific <amperific@gmail.com>
slicing-by-8 algorithm for crc32 and crc32c

Signed-off-by: amperific <amperific@gmail.com>

Conflicts:
	lib/Kconfig
	lib/crc32.c
Revert "slicing-by-8 algorithm for crc32 and crc32c"

This reverts commit 9335212ae999ee6e1b1f999077e0d23c70ce76c5.
Defconfig: Build all TCP Congestion modules

Signed-off-by: amperific <amperific@gmail.com>