make SampleData::parse public and have it set the header

this is for performance reasons. we were defining operator= with a
constref but not rvalue ref, resulting in expensive copies in some
callers that do things like:

_sampleData = SampleData(...)

I'll add the rvalue accepting copy constructor also, but making parse
public is optimal for the use case at hand.
add move-compatible assignment op for SampleData
use boost::qi to parse floats (ints are next)