Support schema merging.
Numerous improvments of the type system.

Included changes:

  - Types now have a total order. Previously they were only
    equality-comparable.

  - The type system has no longer a notion of "event". From now on, a
    schema accommodates only types. An event is now a value with a named type.
    (At this point the value of an event is still restricted to records, but his
    is only a small technical hurdle we'll remove in the future.)

  - The schema predicate underwent some polishing. The predicate now has the
    form "x.y.z", which represents a "typed suffix." For example, consider the
    schema predicate "orig_h == 10.0.0.1". If we have 10 events, each of which
    have somewhere burried in them an argument called "orig_h" and *all* have
    the same type address, then the query processor takes a disjunction of all
    of them, e.g., "foo.orig_h || id.orig_h || bar.baz.orig_h". Globbing
    wildcards are supported, e.g., "f*o?.y.z" would match "fooooz.y.z".

  - Events now carry their type information intrinsically. Until an
    event can represent an arbitrary value, it will keep an extra type
    pointer for its record.

  - Types are immutable after construction and can only be cloned. This
    is important because many components reference and share the same
    type.

  - Segments now have a schema of the events they carry (unless they
    carry events with invalid type information). When serializing events
    to a segment, the writer automatically incorporates the event type
    into a local schema which gets merged with the segment upon
    flushing.

  - The Bro 2.x log file source now constructs a schema when parsing the
    log file header.

  - The record type now features generic flatten() and unflatten() methods
    which either roll out recursive record arguments or reassemble flattened
    records. For example, the Bro file source now reassembles flattened
    records, such as the "id" record from id.orig_h, id.orig_p, etc.

  - There exists a new type "key" which is the named equivalent of an "offset."

Relates #7.
Support reading from STDIN
Make paths hashable.
Fix globbing transformation.
Misc. fixes and tweaks.
Add hashing framwork.

This patch adds an API for various hashing algorithms, both one-shot and
incremental. Algorithms currently supported:

    (1) Murmur3 (one-shot only)
    (2) xxhash (one-shot and incremental)
    (3) CRC32 (one-shot and incremental)

While (3) is technically not a hash function, it fits well under the same
interface.