Solidity contract that allows users to stake ether in the contract and keep track of their balances.
If a threshold of staked ether is reached by a certain deadline, the ether can be sent to an ExampleExternalContract and trigger complete().
If not enough ether is staked then users can call withdraw() to get their ether back.