simplify form of script for computerSpeed param

[#45016019]
fix generation of random elements

[#45016119]

1. Don't use the length of the elements.mass array
to determine the number of elements. Normally typed
arrays are used and these are extended in groups of
10 entries or more at a time.

Instead always use an engine getter method. In this
case:

  engine.getNumberOfElements()

2. Randomly select from non-amino-acid elements
when no specific element is passed to:

  model.addRandomAtom()
Restore spacing between items in a horizontally aligned radio component

[#44988393]

Also, refactor slightly radio component. Add class defining its
orientation and enforce vertical alignment by CSS rules, not <br/>
elements.
Add resize() method to the interactive controller

[#45030209]
Call modelLoaded after modelController variable is added to the API

[#45030209]

It was causing errors in application.js, which was expecting that
modelController property of a interactive controller was available
when modelLoaded callback was executed.

In general, IMHO that also presents an anti-pattern of doubling
public variables and exporting them using:
api.someVariable = someVariable;
where someVariable is a closure variable used elsewhere.
Update Lab application to support non-iframe mode again

[#45030209]
Refactor pulldown and radio components, handle unknown prop differently

[#44812673]

Previously, when radio / pulldown were bound to some property and its
value wasn't represented by any options, the last active selection was
untouched. Now, when value is unknown, author can be sure that no
option will be selected.
progress towards supporting resizable in non-iframe

[#45030209]

but draggable resize not yet working …?
start objects in gravitational test with 0 vy

IS [#44983919]
Change "script-example" interactive to "Interactive Components"

[#44616403]

Also change title and add text components there.
Add interactive text component

[#44616403]

It simply lets you to define a text and add it to the interactive.
Update interactive metadata to support new text component

[#44616403]
Support the new text component in the interactives controller

[#44616403]
Add basic styles for the text component

[#44616403]
Add text to the "Custom Component Dimensions" interactive

[#44616403]

As text component support custom width and height.
A new draft interactive using text component

[#44616403]

/examples/interactives/interactives.html#interactives/sam/gas-laws/7-why-did-the-can-collapse-new-layout.json
add optional filter func to getNumberOfAtoms()

[#44621785]

Prototype for discussion ..

Example: returns number of atoms with element == 3

  getNumberOfAtoms('element[i] == 3')
Add ability to send batch of actions without changeHooks

Calling model.startBatch() before a series of otherwise-
invalidating changes will prevent the pre/postChangeHooks
from triggering a recalculation of model output properties.

This results in the ability to perform large sets of
actions faster, so long as the batch of actions does not
expect properties to be recalculated between each action.

Script authors can access this functionality by wrapping
sections of script in a batch function, e.g.

batch(function() {
  // do something
});

This syntax will prevent accidental starting a batch without
ending it, which would cause model not to function correctly.
Simplify deserialization slightly with batch
Prevent model.start() from continuously speeding up model

Each time model.start() is called (say from an author
script) a new tick timer is added. This increases the speed
of the model.

This can be seen very clearly if you create an author
script that simply calls start() a bunch of times.

This fixes this behavior by returning immediately if
the model is already running.

[#45110023]