Implement prebuffering. For now, the default that max 1MB of data is prebuffered (this is configurable)
Add a property to get the preload progress.