VL: add parsing support for assignment patterns, and add consteval support for  system function
Merge remote-tracking branch 'remotes/origin/master' into array
Merge pull request #285 from ragerdl/master

Removing the disabling of waterfall parallelism for 20 books.
tweaks to avoid slow hash table warnings
fixes for linting
Added "implicit hypothesis" feature for more efficient meta rules.  Allow profiling with state.

This change arose out of an email thread started by J, who contributed
to its design.  Quoting :doc note-7-0:

  It is now possible to create more efficient :[meta] rules by writing
  metafunctions that create ``implicit hypotheses.'' See
  meta-implicit-hypothesis.

Quoting :doc note-7-0:

    * It is now legal to [profile] functions that take [state] as an
      argument. Thanks to Sol Swords for requesting this change. In
      the course of making this change, we took a conservative
      approach and put the same requirement on memoizing functions
      that take user-defined [stobj]s: that is, the memoization has
      to be a profiling call, meaning that the value is nil not only
      for the :condition keyword but also for the :inline keyword. We
      can probably remove this additional restriction if necessary.

Other tweaks:

- Removed needless lock from memoize-fn-init-2, which was called only
  in the context of with-global-memoize-lock.

- Restored the ability to memoize a function inside the call of a
  memoized function -- in particular, after profiling certify-book-fn
  you can memoize a function inside certify-book.  Thanks to Sol
  Swords for requesting this improvement.  In the process, we have
  cleaned up what might have been an incorrect implementation in the
  case that one needs to grow some structures in order to memoize more
  than about 500 functions.  One consequence is that in this case, if
  a memoized function is currently running, a somewhat scary
  continuable error will occur.

- Fixed profile-all (in books/centaur/memoize/old/profile-raw.lsp),
  which was broken.
Tweaks for wrong memoizing with state or stobjs.
Trivial :doc tweak.  Also (forgot to mention in previous commit) again syched doc.lisp.
VL: add preliminary support for some new SystemVerilog features:
 - some level of sizing support for unpacked types and assignment patterns
 - support extensional constants '1, '0, 'x, 'z in sizing
 - in always_comb, support variables that are written in some branches
   but not others, by setting them to X when not otherwise set (jared)
Merge master into array

Conflicts:
	books/centaur/vl/mlib/writer.lisp
Merge branch 'array'
Cleaned up memoization of built-ins at startup; new memoize keyword :stats; memoization stays on in ACL2(hp) even with waterfall-parallelism on.

Dealt with the following comment from memoize-raw.lisp (and thus
deleted it); see first item from :doc note-7-0 below.

; - Maybe think a bit harder about whether our initial memoizations (calls of
;   memoize-fn in acl2h-init-memoizations) are really handled properly, given
;   that our code is so oriented towards calling memoize in the loop.  The
;   current approach seems to have worked well for a long time, so maybe this
;   isn't much of a priority.  But it seems a bit dodgy somehow.

Quoting :doc note-7-0:

    * For every built-in memoized function defined in the ACL2 logic, the
      memoization is done in the usual way (during the ACL2 build),
      using the [memoize] event during the ACL2 build. Such functions
      can thus be [unmemoize]d by users in the usual way. Thanks to
      David Rager for requesting this enhancement.
    * A new memoize keyword, :stats, can control whether statistics will be
      saved for reporting with (memsum).
    * Memoization in ACL2(hp) is no longer affected by calls of
      [set-waterfall-parallelism].
Synched up doc.lisp