Rename CommandAsync->Command, cancel functionality

Renamed CommandAsync to Command to make things simpler, and
refactored into its own file.

command() now returns a pointer to the created Command object,
which the client can pass into cancel() to stop any delayed
or repeating calls. This is very important for an asynchronous
client.