[1125439] Duplicate baselines metric entries
Due to some git trouble this is something of a manually generated squash
commit.  The changes are somewhat two-fold.  First, there are changes
relevant to the initially reported symptom, which was the existence of
duplicate baselines for a single schedule.  The code looked like it was
capable of generating a storing a duplicate, due to the use of Lists (not
Sets) in the APIs, and also the lack of a unique index even though there is
a 1:1 relationship between baseline and schedule.  The first set of commits
addressed these issues and also adding chunking to avoid large Txs and also
oracle IN-clause limits.
- Make the db index on baseline's scheduleId unique. There should only be
  one baseline for a schedule. This will prevent the problem in the BZ, possibly
  at the expense of failure when trying to store a duplicate, but that would
  perhaps help us pinpoint a problematic code-path.
- Use Sets (or a Map) as opposed to Lists in several places in the local API.
- Simplify and I think make more efficient the query for selecting schedules
  without a current baseline. Make it return distinct ids (this is a hedge,
  I don't think it would return duplicates, but this ensures that constraint).
  Replace a left join with a NOT EXISTS sub select.
- Chunk the storage of baselines to prevent large Txs, don't pass entities
  across Tx boundary, fetch all Schedules in one query, and (maybe) simplify the
  entity manager interaction.
- Simplify some of the TransactionAttribute decls
- Mark MeasurementSchedule.baseline as an optional 1-1 relationship, just to make
  it explicit on the entity.
- Fix some local SLSB jdoc

Later, the actual root cause was discovered: the baseline job executing
concurrently and the same schedule occurring in the overlapping jobs. This
scenario was originally thought to be impossible  due to the stateful
nature of the quartz job. But in fact it is possible in certain conditions
due to quartz clustered recovery logic(see BZ comments).  These changes
minimize the concurrent job possibility:
- increase the quartz clusterCheckinInterval from 30s to 2m.  This
  decreases the chance of false positives when quartz checks for down
  schedulers and should have little or no effect on the recovery of our jobs.
- move the data calculation work from DataPurgeJob to the new DataCalcJob,
  leaving DataPurgeJob to deal only with RDB maintenance and letting
  the new DataCalcJob only work on baseline and OOB generation.  There is
  no reason for DataCalc work to have to wait for DB maintenance work.
  Also, stagger the jobs by 1/2 hour to lessen concurrent work.
- for the cron jobs, switch the misfire policy from the default (RUN_ONCE)
  to DO_NOTHING.  So, instead of long running jobs again starting up
  immediately after finishing, let it wait for the next scheduled start
  time.  This also reduces the chances of overlap if we do in fact get a
  false positive recovery situation.  (as an aside, there is a good web page
  here regarding clustered quartz logic: http://flylib.com/books/en/2.65.1.91/1/)

Given the work described above it's now very unlikely but not completely
guaranteed that we won't have overlapping baseline calculation jobs.
Because we now have a unique index on baseline.schedule we will immediately
detect an attempt to store a duplicate baseline for a schedule.  In the
unlikely event that this happens we know it's [very likely] due to an
overlapping job. So if we fail to save baselines because of a constraint
violation we just catch, log a warning and continue.