refactor to a multipart interface that can support more than one type
use the new interface
added tests
organize headers and update podspec