Allow non n.m tagged push to gh if not master

In the pre-push git-hook, allow pushing of versions to github if
on a branch other than master.
Rework the option parsing

Now, the option parser works on lists of strings.

Previously, the option parser worked on the format returend by
init:get_argument/1, but to go from a list of strings (in protoc-erl)
to that format also meant a bit of parsing to find out what was
options and what was arguments, so inevitably, there was similar
option parsing code in protoc-erl and gpb_compile.

The list of strings is a much lower common denominator, and parsing
options from that format instead takes away much of the code
duplication.
Merge branch 'rework-opt-parsing'
Prepare for 3.17.2
Apply the use_packages option per file

Previously the package name was applied/prepended after all imports
had been processed and merged, but before resolving names.

But the package statement is per file, so the use_package option must
apply per file, meaning that package names must be prepended per file
rather than after all imports have been processed and merged. This is
now done this way.

The following proto files previously failed to compile, but now
succeed:

   a.proto:

      package a;
      import "b.proto";

   b.proto:

      package b;
Add a command line option, -pkgs, for use_packages
Prepare for 3.17.3
Fix generated NIF code for enums in messages

When enums are declared inside a message, the enumerator symbols are
prefixed with the message name and enum name (separated by
underscores) in the C++ code generated by Google's protoc.
Adapt to that.

Slightly adapted the solution provided by Louis-Philippe Gauthier.
Fix generated NIF code for strings_as_binaries

Type mismatch: invalid conversion from unsigned char* to const char*.

Thanks to Louis-Philippe Gauthier for providing a solution.
Prepare for 3.17.4
Avoid generating unnecessary NIF functions with -strbin

Avoid generating utf8_to_uint32 as well as utf8_count_codepoints if
the -strbin is specified with -nif.

Previously, the utf8_to_uint32 was always generated.

The utf8_count_codepoints, too, was always generated, and used to
count code-points, the value then thrown away, for valid utf-8.
Prepare for 3.17.5
Merge branch 'master' of https://github.com/tomas-abrahamsson/gpb