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

Okay, I'll do it. But I think they are going to be confused in the case when the same ID (e.g. "DP") is present on both individual and shared and they do `const auto dp_index = header.field_index("DP");`. They will ask questions. I'll try to be explicit in the docs but I know they won't read.