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
Mass implicit conversion is almost always a bad idea -- causes way too many unexpected problems. The user should know the type of the field he wants to access, and get it right at time of access. In the rare case where the user actually wants to convert to a different type, he can do it manually.

No need to convert to boolean to check for presence/absence -- that's what the missing api is for!