Under high load, BoxAPIOperations throw assertion failures on start

The executeOperation method in BoxAPIOperation.m throws an assertion
failure if the method runs and the operation is not ready.

BOXAssertFail(@"Operation was not ready but start was called");

This can happen if a dependency is added to the operation between
the time start is called and executeOperation runs on the API
Operation Thread.

* executeOperation is called asynchronously from operation start
* OAuth2 operations are added as dependencies for *all* operations in
  the queue, including those that are already executing
* There is no coordination between operations starting and operation
  dependencies being added.

Proposed solution: Add a class-level lock to BoxAPIOperation.

* All operations should acquire this lock immediately in start.
* The BoxAPIQueueManagers should acquire this lock before adding
  OAuth2Operation dependencies.
* The BoxAPIQueueManagers should only add dependencies to operations
  that are not executing.
Pull setting operations state = executing into start

This allows operations to set that they are executing when we are sure we have the
lock and allows us to safely async the call to execute operation.
Merge pull request #36 from box/high-load-stability

Under high load, BoxAPIOperations throw assertion failures on start