Variant: refactor of the shared field api

* shared fields api now behaves like the individual fields api (creates an object but doesn't make any copies)
* SharedField class is iterable and can hold multiple values
* special cased boolean_shared_field to return a single bool (since * vector<bool> is impossible by spec)
* current API (as well as the individual field API) relies on missing() checks before using the values. Dereferencing a missing shared field will segafult -- see #166
* add check for dereferencing an empty field (throws out of range exception instead of segfault)

fixes #151
if we can, why not? I could see a use case for this. If you have a string field and you just want to run an iterator on the presence of it for the records? boolean conversion is trivial to do.

The approach I took was the same as the current individual field API, convert when possible (meaningful) and throw when we can't convert. 

Especially for numeric conversions between ints and floats, I can see this being useful in many instances.