Fix bug in SizeTracking*

We were not incorporating the delta in sizes, because Seq does not
match the case a :: b :: c, while List does. This was originally
reported by @mateiz.
Avoid dropping a block back to disk if reading from disk

When the BlockManager reads a block from disk, it attempts to cache
it in memory. However, when we put the values in memory, it writes
them back out to disk, which is unnecessary and has confusing
semantics. Instead, we create a flag "allowPersistToDisk" for
memory store's putValues to identify cases we don't want to drop
the block to disk even if it doesn't fit in memory.
Fix binary incompatibility
Use original storage level for blocks dropped to disk

... instead of replacing its original storage level with DISK_ONLY.
Otherwise, when there is more free memory later, we will not cache
the block in memory when reading back from disk, because the level
does not specify cache in memory. This is the case even if the original
storage level is MEMORY_AND_DISK.

This commit makes sure we always put a block in BlockManager with
its original storage level intact.