I have two questions about the proposed implementation:
1. Why not follow pytz lead and expose an instance of UTC rather than the UTC class itself?
2. Is there a real need to add a boolean argument to utcnow()? I think timedelta.now(UTC()) or with utc = UTC() timedelta.now(utc) seems to be a more obvious way to produce TZ aware datetime.
If a singleton instance utc is exposed instead of UTC class, I would suggest to change its repr to 'datetime.utc'.
On the patch itself, datetime_utcnow() is missing an error check for PyObject_IsTrue() return value:
>>> class X:
... def __nonzero__(self): raise RuntimeError
...
>>> datetime.utcnow(tz_aware=X())
datetime.datetime(2010, 5, 25, 2, 12, 14, 739720, tzinfo=<datetime.UTC object at 0x1015aab80>)
XXX undetected error
..