Created the AggregateException, which is intended for bulk or batch operations in which it is necessary for the operations to continue, even if some steps fail.  Examples for usage include operations that iterate over a collection.  Invalid elements in the collection may cause exceptions which can be aggregated without preventing other items in the list from being processed.
Index and delete operations across an Iterable<ObjectMetadata> collection have been streamlined so that the operations are sent to ElasticSearch in one or more bulk requests of 20 or less (which can be changed by changing the BULK_REQUEST_SIZE constant), and failures can be reported using the AggregateException after all operations are attempted.  This change allows large amounts of ObjectMetadata records to be handled in future revisions in an efficient manner, and allows the operation to continue even if some records fail.
The ReindexTaskStep is created.  If a project is given for a Reindex Task, then only that project is reindexed.  Otherwise, all objects are reindexed.
Added an ObjectEvent for indexing an object, and included an auditLog event when objects are indexed upon discovery.