optimize ImmutableText memory usage

* nodes shouldn't contain null fields
* chunk into small fragments only when document modifications are made