Node placeholder API

ASDisplayNodes now have an overridable method -placeholderImage that lets you provide a custom UIImage to display while a node is displaying asynchronously. The default implementation of this method returns nil and thus does nothing. A provided example project also demonstrates using the placeholder API.
Ok after messing around w/ doing this for a little bit, we might want to revisit. In order to mutate the backing store in the setter, we would either have to:

a. Make ```setPlacholderEnabled:``` thread affine
b. Trampoline to the main thread, and then put some mech in place w/ anything that tries to read ```placeholderEnabled```

Both options seem yucky.

Also, wouldn't removing ```placeholderEnabled``` checks kind of defeat the purpose of having the property? I look at this property as more of a setup/config. I think we could add something to remove the placeholder if this its set to ```NO``` and display is already in flight, but adding the setup/teardown seems to have unwanted side effects.

FWIW here's what I changed the setter to:

    - (void)setPlaceholderEnabled:(BOOL)placeholderEnabled
    {
      ASDN::MutexLocker l(_propertyLock);

      if (_placeholderEnabled != placeholderEnabled) {
        _placeholderEnabled = placeholderEnabled;

        if (placeholderEnabled && !_placeholderLayer) {
          dispatch_async(dispatch_get_main_queue(), ^{
            [self _setupPlaceholderLayer];
          });
        } else if (!placeholderEnabled && _placeholderLayer.superlayer) {
          dispatch_async(dispatch_get_main_queue(), ^{
            [self _tearDownPlaceholderLayer];
          });
        }
      }
    }