added new type and several functions to git_strmap

This step is needed to easily add iterators to git_config_backend
As well use these new git_strmap functions to implement foreach

* git_strmap_iter
* git_strmap_has_data(...)
* git_strmap_begin(...)
* git_strmap_end(...)
* git_strmap_next(...)
replaced foreach() with non callback based iterations in git_config_backend

new functions in struct git_config_backend:
  * iterator_new(...)
  * iterator_free(...)
  * next(...)

The old callback based foreach style can still be used with `git_config_backend_foreach_match`
Don't typedef a pointer

Make the iterator structure opaque and make sure it compiles.
config: compilation fixes
config: saner iterator errors

Really report an error in foreach if we fail to allocate the iterator,
and don't fail if the config is emtpy.
config: get_multivar -> get_multivar_foreach

The plain function will return an iterator, so move this one out of
the way.
config: move next() and free() into the iterator

Like we have in the references iterator, next and free belong in the
iterator itself.
config: initial multivar iterator
config: hopefully get the iterator to work on multivars
config: working multivar iterator

Implement the foreach version as a wrapper around the iterator.
config: add _next() and _iterator_free()

Make it look like the refs iterator API.
config: fix leaks in the iterators
config: introduce _iterator_new()

As the name suggests, it iterates over all the entries
config: introduce a regex-filtering iterator
config: implement _foreach and _foreach_match on top of the iterator directly

Use a glob iterator instead of going through
git_config_backend_foreach_match. This function is left as it's
exposed in the API.
config: handle empty backends when iterating
config: deduplicate iterator creation

When the glob iterator is passed NULL regexp, call the non-globbing
iterator so we don't have to special-case which functions to call.
config: get rid of a useless asignment
config: don't special-case the multivar iterator

Build it on top of the normal iterator instead, which lets use re-use
a lot of code.
Don't try to pack symbolic refs

If there were symbolic refs among the loose refs then the code
to create packed-refs would fail trying to parse the OID out of
them (where Git just skips trying to pack them).  This fixes it.