filepath: make the filepath class extensible

I'm about to create a child class for use by the LFNIndex instead of the MDS, so
declare stuff as protected instead of private, and provide a new bits-based
constructor.

Signed-off-by: Greg Farnum <greg@inktank.com>
LFNIndex: use new lfn_filepath instead of vector<string> for passing paths

We currently use a vector<string> as our basic unit of handling paths. This
is fine, except we also have to convert that vector into a single string
repeatedly in several places within a single call chain. The filepath struct
already exists partly to handle that, so create an lfn_filepath child class
with tools to use it as our basic unit in a quick swap. Then we can
incrementally switch specific function interfaces to use it more intelligently
and remove the hacky bits that let it masquerade as a vector<string>.

Signed-off-by: Greg Farnum <greg@inktank.com>