Variant: add index based field getter API

individual and shared fields can be more efficiently accessed via
indices looked up from the header once instead of doing the hash lookups
every time you access a field (during traversal). This commit adds that
functionality.

* add field index API to the VariantHeader
* refactor code duplication in INDIVIDUAL and INFO field API
* avoid double index lookup in the unforgiving field getter API
* add tests for missing indices in the header

ps: tests for the by_index API are written in terms of the field getter
API that accepts conversion. Exceptions are on the tests commented out
that require #187 to be implemented. Hence why a few are not covered.

fixes #162

they can't be inlined because the template function is private. We could inline the template function, but I'm sure the compiler will make the best decision in that case since it has the full visibility in one compilation unit.