[C] Fix Piston Behavior. Fixes BUKKIT-2287, BUKKIT-3523, and BUKKIT-3529

##### The Issue:
Depending on how the piston is powered, `BlockPiston.doPhysics` may be called twice. This causes `BlockPistonExtendEvent` to be fired more than once per piston extension. Also, calling `setCancelled(true)` on either `BlockPistonExtendEvent` or `BlockPistonRetractEvent` has no effect.

##### Justification for this PR:
When duplicate events are fired, it is impossible to differentiate between them because no game state has actually changed between the two firings. When one of the piston events are cancelled, the corresponding action should not occur, in accordance with the general expectation for an event that implements `Cancellable`.

##### PR Breakdown:
Moving the event calls to where the piston actually extends/retracts fixes the duplicate events because this code section is only called once. Additionally, if we return from this method the extension or retraction never happens.
 
##### Testing Results and Materials:
I created a listener that would print out every time an `BlockPistonExtendEvent` or `BlockPistonRetractEvent` was called. I powered a piston in a variety of different ways and confirmed each event fired exactly once per "real" extension or retraction. I also added `event.setCancelled(true)` calls to each listener and confirmed that the piston did not take the cancelled action.

##### Relevant PR(s): 
[CB-1145](https://github.com/Bukkit/CraftBukkit/pull/1145) - Changed when data was set, which doesn't help if a lever causes the extension event
 
##### JIRA Tickets: 
[BUKKIT-2287](https://bukkit.atlassian.net/browse/BUKKIT-2287) - Piston events are firing more than once in certain scenarios
[BUKKIT-3523](https://bukkit.atlassian.net/browse/BUKKIT-3523) - Piston events fire twice
[BUKKIT-3529](https://bukkit.atlassian.net/browse/BUKKIT-3529) - Piston Extension cancelled, still applies because of fast clock
shouldn't that be `ìf (!event.isCancelled()) {``?