Commadn CanExecute improvements

- Added SetCanExecute to DelegateCommand so that user code
  can have a lightweight alternative to ExpressionCommand.
- Added caching of CanExecute to ExpressionCommand to reduce the
  cost of converting parameters and evaluating larger expressions.
- Moved *CommandBase to the Core namespace so user code isn't cluttered
  with plumbing classes.