Only apply textarea fix to textareas; refactor

Textareas are the only preserved tag that is editable, so we don't need to
recode the newline for <pre> or <code> tags. With this and the last few
preceding commits we bring Haml 4.x's performance nearly back in line with Haml
3.1.4.

Haml 3.1.4:

                           user     system      total        real
compiled haml pretty   0.330000   0.000000   0.330000 (  0.332720)
compiled haml ugly     0.180000   0.000000   0.180000 (  0.173543)
cached haml pretty     0.740000   0.000000   0.740000 (  0.740294)
cached haml ugly       0.490000   0.000000   0.490000 (  0.497688)

Haml 3.1.8:

                           user     system      total        real
compiled haml pretty   0.600000   0.000000   0.600000 (  0.605575)
compiled haml ugly     0.210000   0.000000   0.210000 (  0.210508)
cached haml pretty     1.240000   0.010000   1.250000 (  1.256737)
cached haml ugly       0.520000   0.000000   0.520000 (  0.527566)

Haml 4.0.0:

                           user     system      total        real
compiled haml pretty   0.720000   0.000000   0.720000 (  0.754891)
compiled haml ugly     0.300000   0.000000   0.300000 (  0.296439)
cached haml pretty     1.300000   0.000000   1.300000 (  1.301510)
cached haml ugly       0.570000   0.000000   0.570000 (  0.578155)

This commit:

                           user     system      total        real
compiled haml pretty   0.430000   0.010000   0.440000 (  0.429153)
compiled haml ugly     0.220000   0.000000   0.220000 (  0.220758)
cached haml pretty     0.810000   0.000000   0.810000 (  0.809804)
cached haml ugly       0.510000   0.000000   0.510000 (  0.516821)
Document Haml 4.0 textarea behavior
Merge branch 'stable'

Conflicts:
	lib/haml/buffer.rb
Fix data attribute flattening with fixnum values.

The circular reference check is only necessary for hash attribute
values. Applying the check to other types breaks if they have the same
object ID. This can happen with fixnum values.
Merge branch 'stable'

Conflicts:
	lib/haml/compiler.rb