make metadata storage pluggable

here we only use blob for payload, which is limited to 16KB, we should use the same type for payload across the board