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
VariantField: fix illegal access on missing fields

with this commit I address two issues in VariantField:

* missing individual fields were not complying with the gamgee::missing() functionality.
* missing individual fields were seg_faulting when dereferences with operator[]

fixes #166 and adds tests for both cases.
VariantField* renamed to IndividualField*

VariantField was an attempt to make them generic enough to supply  the
functionality for both individual and shared fields. Turns out it's more
work than it's worth, so rather, let's give them different names.

This name change shouldn't affect client code since nobody would ever
spell these out (except for the current select_if API, but that's gonna
change).
Variant: simpler template  parameters of select_if

select_if is a wonderful tool, but currently it is forcing the user to
know what is the underlying type so he can use the appropriate template
parameter. This defeats the purpose of creating complicated underlying
types for performance and relying on the user using auto everywhere.

This commit enables select_if to be used as it was intended, without any
template parameters. All template parameters are now fully deduced from
the function parameters.

fixes #153