HttpJsNorm class serves as a script Normalizer, and currently has two implementations:
the Legacy Normalizer and the Enhanced Normalizer.

In NHI, there are three JSNorm extensions:
 * HttpInlineJSNorm, processes content of HTML script tags.
 * HttpExternalJSNorm, processes payload with JavaScript MIME type.
 * HttpPDFJSNorm, processes payload with PDF MIME type and PDF files in MIME attachments.

Normalization context is per transaction. It is created once js_data calls for normalized JS data,
and is deleted once transaction ends. Partial inspections feed data incrementally to JS Normalizer,
but the output is accumulated and concatenated in the right way, presenting more comprehensive block
of data to Detection.

During message body analysis the Enhanced Normalizer does one of the following:
1. If Content-Type says its an external script then Normalizer processes the
   whole message body as a script text.
2. If it is an HTML-page, Normalizer searches for an opening tag and processes
   subsequent bytes in a stream mode, until it finds a closing tag.
   It proceeds and scans the entire message body for inline scripts.
3. If it is a PDF file transferred as MIME attachment or as a message body then
   Normalizer extracts strings assigned to '/JS' key, or streams referred from
   the same value, and normalizes their content as JS text.

Also, js_data IPS option's buffer is a part of NHI processing in order to start the normalization.

Enhanced Normalizer supports scripts over multiple PDUs.
So, if the script is not ended, Normalizer's context is saved in HttpFlowData.
The script continuation will be processed with the saved context.

In order to support Script Detection feature for inline scripts, Normalizer ensures
that after reaching the script end (legitimate closing tag or bad token),
it falls back to an initial state, so that the next script can be processed by the same context.
