Direct stream read/write for persist and restore

Previously, these methods dealt with serializing to/from byte arrays
rather than reading/writing the streams directly.
Add timeInMs() method
Add size() method to report number of samples
Convenience function to get last result (in ms)
Update log level for full recovery

A full metadata recovery should still be reported in production
environments.
Fix loadBlock and loadMetadata

It’s helpful to actually read from disk when loading these.
Add performance timers to full recovery operation