(ocaml) optionally preserve unknown Protobuf fields

Can be enabled by specifying piqic-ocaml --gen-preserve-unknown-fields flag.

When enabled, unknown (unrecognized) Protobuf fields are captured during
de-serialization in a special 'piqi_unknown_pb' field and automatically written
back when the record is serialized to Protobuf.

Such treatment of unknown fields is consistent with Protocol Buffers behavior.
For instance, its manual states that "... the unknown fields are not discarded,
and if the message is later serialized, the unknown fields are serialized along
with it – so if the message is passed on to new code, the new fields are still
available.

Keeping it disabled by default in case of OCaml though, because OCaml records
lack field defaults and therefore can't be easily and efficienly constructed
without specifying all record fields including the artificial 'piqi_unknown_pb'
we've just introduced. There are known workarounds (e.g. using using generated
*_default() functions) but they make code look uglier.
(ocaml, piqi server) Fix parsing empty Piq input in frameless mode

Empty input was erroneously throwing Piq.EOF exception.
Added --gen-preserve-unknown-fields to list of accepted CLI options
Add a new .piq-alias property for field and options

This allows to specify an alternative name a field or an option; used only when
parsing Piq; Field names specified via .name or derived from .type take
precedence over names defined using .piq-alias

The ability to use an alternative name is useful when Piq is used as as a
syntax notation for DSLs.
Merge pull request #41 from amplidata/missing_cli

(ocaml) Added --gen-preserve-unknown-fields to list of accepted CLI options
Code and interface refactoring
Add basic validation of the .piq-alias field and option property
Minimize dependency of piqi on piqi-ocaml and vice a versa

This is done in preparation fo moving piqi-ocaml into a separate repo.
Improve build scripts

- automatically build piqilib when building piqi
- automatically re-build piqi on piqilib changes
Add support for a record-level .piq-positional setting

When specified, it applies to all record fields unless overridden by a per-field
setting.
Check for infinite types
Move some code between piqilib and piqic-ocaml

Remove piqilib/piqi_graph.ml and add its functionality to piqic-ocaml as it was
the only caller of the Piqi_graph functions.
Fix tests

tests/piqi_compile was failing after recent changes
Remove link checking step from CI build

The test is flaky -- failing in 50% builds for some reason. Removing it until we
figure out how to make it reliable.
Fix: enable Piq-speicfic checks back as well as record-level .piq-positional

This code was accidentally disabled by using a wrong linking order which led to
excluding the piq.ml module's functionality.
More robust handling of "convert --piq-frameless-input"

This option is not applicable to scalar types so we need to process them
slightly differently than container types.
piqi server: handle exceptions more accurately

exceptions

  internal error: error while running function "convert": Piqi_convert.EOF
  internal error: error while running function "convert": Piqi_piqirun.Error(-1,
  "missing field: 1")

are now reported as proper piqi-rpc errors: missing_input and invalid_input
respectively
Fix: piqi to-proto incorrectly handling aliases in some cases

Alias pointing to an imported record which field has an imported type was
handled incorrectly.
Build improvements and fixes for Windows/MinGW build
(ocaml) Fix: calling piqic-ocaml --pp in non-terminal mode

Add -printer o to the arguments of camlp4o when --pp is used in piqic-ocaml

(It used to be there but was removed by mistake during piqic-ocaml rewrite.)

Camlp4o uses the Camlp4AutoPrinter by default (no -printer argument
provided), which will either produce ocaml code or a binary AST
depending on whether the output is a terminal or not (regardless of any
-o option provided). If piqic-ocaml is run from a process that is not
started on a terminal, the results of piqic-ocaml --pp was a binary AST
file.