Rewrite ReactiveCommand

This PR combines and rewrites ReactiveCommand and ReactiveAsyncCommand to be under one object, inspired by ReactiveCocoa's RACCommand. Here's the interface for it:

```cs
public interface IReactiveCommand : IHandleObservableErrors, IObservable<object>, ICommand, IDisposable, IEnableLogger
{
	IObservable<T> RegisterAsync<T>(Func<object, IObservable<T>> asyncBlock);

	IObservable<bool> CanExecuteObservable { get; }
	IObservable<bool> IsExecuting { get; }
	bool AllowsConcurrentExecution { get; }
}
```

The new ReactiveCommand throws away a lot of the imperative affordances that the original had (via `ReactiveCommand.Create`), so the original classes are left in under the `Legacy` namespace to assist with porting

## TODO:

- [x] Make sure that `AllowsConcurrentExecution = true` actually works